1,结构体的构造声明如下;
struct 结构体类型 //结构体类型常常首字母大写;
{ 结构体成员; //结构体成员的引用格式为: 结构体变量.成员
}结构体变量; //如果是结构体数组,变量为数组名[结构体个数]
1.1,结构体的使用:
1.1.1:声明结构体;
1.1.2:定义初始化结构体;
1.1.3:调用或赋值或使用结构体指针引用;
struct Student //使用struct关键字声明一个Student类型结构体;
{ char Name[20]; //字符串结构体成员Name;
char Sex[20]; //字符串结构体成员Sex;
int Age; //整型结构体成员Age;
} student1={"胡犀牛","男",23}; //定义结构体变量student1,并且初始化;
struct Student student2={...}; //单独定义结构体变量并且初始化;
printf("姓名:%s",student1.Name ); //结构体变量的调用: 结构体变量.成员
1.1.4:如果结构体的成员还是结构体,则需要继续使用成员运算符引用变量;
1.1.5:成员运算符的优先级max,结构体成员与普通变量使用方法一样;汉字属于字符串;
1.1.6:结构体声明可以在主函数内也可以在主函数外,因为声明不是函数定义;
1.1.7:如果一个结构体成员还是结构体,初始化或者调用的时候是使用结构体内的结构体的成员;要层级调用;
1.2,结构体数组;
表示数组中的元素为结构体类型的数组;(兼具结构体和数组的语法特点;)
声明结构体数组时的变量格式为:数组名[数组个数]
调用结构体数组时的变量格式为:数组名[数组下标].成员
1.3,结构体指针;
表示指向结构体变量起始地址的指针;
变量定义为:结构体类型 *指针名字;
访问结构体成员的两种方式为:
1.3.1:(*指针).成员 //指向指针地址得到结构体变量,等价于 "变量.成员" 的调用;
1.3.2: 指针=&结构体变量;
指针->结构体成员; //定义一个指针,然后把结构体的地址传递给指针,然后使用结构体指向符指向引用成员;
1.3.3:结构体变量.成员 = (*结构体指针).成员 = 结构体指针->成员
1.3.4: (1)指针->成员:表示结构体指针指向结构体成员的值;
(2)指针->成员++:表示指针指向成员的值,使用后值加1; //没有括号自加运算操作的是成员值;
(3) ++指针->成员:表示指针指向成员的值,值加1后使用;
(4)(++指针)->成员:表示指针先指向下一个成员的地址,然后指向成员的值; //指针加括号自加运算操作的是指针;
(5)(指针++)->成员:表示指针指向成员的值,使用后指针指向下一个成员的值;
1.4,指向结构体数组的指针;
使用方法和结构体指针一样;数组指针自加运算是指向下一个结构体数组成员;
1.5,结构体与函数参数的关系;
1.5.1;使用结构体成员作为函数实参传递;(值传递,与普通变量使用方法一样)
1.5.2;使用结构体变量作为函数实参传递;(值传递,传递的是结构体变量的所有值,值的参数传递是单向)
1.5.3;使用指向结构体变量的指针作为函数实参传递;(地址传递,传递的是结构体变量的首地址,参数值双向传递)
2,共用体;
含义:由关键字union定义,类型为DataUnion; 把几种不同类型的变量存放在同一段内存中,所以同一时刻的共用体变量指向同一个地址内的值;
用法:定义和引用与结构体相同,但是共用体的初始化只要初始化一个值就可以了;
声明:
union DataUnion //声明一个DataUnion类型的共用体;
{ 成员; //成员列表,存入同一个地址中;
}变量; //可以顺便定义变量并初始化,也可以单独定义;
定义:
union DataUnion variable; //定义一个共用体类型的变量variable;
引用:共用体对象.成员
3,枚举;使用enum关键字;
枚举类型包含一组相关枚举标识符;每个标识符一一对应一个整数值常量,称之为枚举常量;
枚举类型初始化的时候我们可以只初始化某个特定的标识符,然后剩下的标识符依次加一;
4,typedef 声明新类型的关键字; 就是将已有的类型声明出新的名字;
原文:https://www.cnblogs.com/caesura-k/p/9807634.html