zoukankan      html  css  js  c++  java
  • C++学习(二十四)(C语言部分)之 结构体1

    1.结构体 存放多个不同类型的数据 但是是相关联的
    数组 存放多个相同类型的数据

    结构体是存放多个相关联的不同类型的数组

    struct 定义一个结构体类型 自定义类型

    2.结构体定义方式 定义类型
    最通用的方式:
    struct student ///student是自己取得名字
    结构体定义的时候也可以初始化
    3.定义结构体类型的变量
    //开始使用
    4.运算符 点运算符(成员运算符) .
    定义的时候初始化

    指针 箭头运算符 -> (只能用于结构体指针)

    其他
    结构类型可以包含任何已经定义好的类型
    给名字比较长的类型 取一个短的外号 用起来方便
    5.取别名便于联想(功能) 方便
    typedef+类型名字+外号; 用的时候直接用外号
    type 是类型 def 是define 宏定义的意思

    6.
    6.1 结构体大小 大于或等于所有的成员之和
    原因 内寻对齐(速度快) 可能会牺牲一部分内存
    6.2 c语言和c++结构体区别
    c++可以省略struct 但c不可以 定义的时候不可以省略

    6.3 关于结构体名字 大于类型的时候可以省略(匿名结构体)

    /*
    单引号用于字符
    双引号用于字符串

    数字 变量名不需要单引号或双引号

    x,yxx-->坐标 定义结构体类型 返回结构体类型变量

    1、定义类型
    2.用自己定义的类型变量
    3.为了方便用typedef给类型取别的名字

    */

    测试代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<time.h>
     4 
     5 #pragma warning(disable:4996)//解决在vs2013中strcpy出错,原因是strcpy安全性太低 vs弃用了 改成了strcpy_s
     6 
     7 struct student   //student 自己取得名字 结构体类型的名字
     8 {//下面的是存放的内容  称之为成员
     9     char name[20];
    10     char sex;
    11     int  age;
    12     char ID[20];
    13 };  //后面要加分号  表示定义结束
    14 
    15 struct myclass  //新的结构体类型
    16 {
    17     struct student num24[64];  //
    18     char ID;  //
    19     //student myclall summer;//不完整类型 这种就不可以 因为我们还没有定义myclass
    20 
    21 };
    22 
    23 typedef struct myclass mc;  //mc就是别名  别名为了区分 可以用大写
    24 typedef int INT;//大写的别名 要取多个别名时 要分开写
    25 
    26 typedef struct  node 
    27 {
    28     int x;
    29     int y;
    30     int mn;
    31 }NODE,NODE1,NODE2,*PNODE;  //可以在定义的同时取别名 并且可以合在一起取多个
    32 
    33 
    34 //typedef struct node *PNODE;//定义结构体指针类型的别名
    35 typedef struct node NODE;//结构体类型别名
    36 
    37 //struct strudent*p 结构体指针  类型  *指针名
    38 void putStudent(struct student*p)  //用函数打印结构体 要传送结构体的地址
    39 {
    40     printf("name:%s,sex:%c,age:%d,ID:%s", (*p).name, p->sex, p->age, p->ID);
    41     //*的优先级低于.运算符
    42     //->运算符 指针成员运算符  p->name  等价于(*p).name 效果一样
    43 }
    44 
    45 void test()
    46 {//先定义类型 然后变量
    47     NODE x;//x
    48     x.mn = 2;
    49     x.x = 2;//变量名和成员们可以一样
    50     PNODE p;//相当于NODE*
    51     //NODE* P;//指针必须赋值才能用
    52     p = &x;
    53     p->x = 2;
    54 
    55 }
    56 
    57 
    58 
    59 int main()
    60 {
    61     //类型+变量名
    62     struct student mark;  //student 类型名 Mark变量名
    63     //结构体变量.成员
    64     mark.age = 10;//使用.运算符 取得里面的成员
    65     //mark.name = "张三";//name是字符数组 不能直接赋值  有一个函数可以对其赋值strcpy 循环    
    66     strcpy(mark.name, "Mark");//赋值
    67     
    68     struct student Evan = {"Even",'M',20,"20162003"};//定义的时候赋初值
    69     //scanf("%s", Evan.name);
    70     //printf("name:%s,sex:%c,age:%d,ID:%s", Evan.name, Evan.sex, Evan.age, Evan.ID);//必须一个一个输出
    71     putStudent(&Evan);
    72     mc danny;  //用别名定义
    73     size_t a;//这也是别名
    74 
    75     //1.数组可不可以看成一个类型
    76     typedef int ARR[4];//定义一个一维数组类型 ARR==> 就是int[4]类型的别名
    77     ARR arr[5];//即数组的数组 ====> int arr[5][4]
    78     //int *p---->变量名去掉之后就是类型
    79     //int arr[4]   int[4]数组类型
    80     //二维数组 数组的数组  
    81 
    82     getchar();
    83     return 0;
    84 }

    2019-03-21  19:11:55

  • 相关阅读:
    python爬虫入门---第三篇:保存一张图片
    python爬虫入门---第四篇:网站对爬虫的限制及突破测试
    python笔记之字符串
    浅析requests库响应对象的text和content属性
    AOP concepts
    设计模式之组合模式
    装饰者设计模式
    设计模式读书笔记-----桥接模式(转)
    适配器模式
    原型设计模式及深拷贝
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10573833.html
Copyright © 2011-2022 走看看