[英语]c语言第九章结构体与共用体
第9章 3. 先说明结构体类型,再定义结构体数据 struct student { char name[12]; char sex; struct date birthday; float sc[4]; } ; struct student std,pers[3],*pstd; 9.1.3 结构体类型数据的初始化 1. 结构体变量初始化 所赋初值顺序放在一对花括号中,例如: struct student std={“LiMing”,’M ‘,1962,5,10,88,76}; 注意: a按成员在结构体中的顺序一一对应赋值。 b不允许跳跃式赋初值。 c未赋初值的数值型和字符型数据,系统自动赋初值0。 9.1.4 结构体类型数据的引用 1. 结构体成员的引用 (1) 结构体变量名.成员名 (2) 指针变量名->成员名 (3)(*指针变量名).成员名 struct student { char name[12]; char sex; float sc[4]; }std,pers[5],*pstd ; pstd=&std; 引用成员形式如下: std.name pstd->name(*pstd).name 9.1.5 函数之间结构体数据的传递 9.1.6 动态存储分配与链表 9.2 共用体 共用体的类型说明和变量的定义方式和结构体的类型说明和变量定义的方式完全相同。 不同的是: 结构体变量中的成员各自占有自己的存储空间,而共用体变量中的所有成员占有同一个存储空间。 9.2.1 共用体类型说明 共用体类型说明的一般形式为: union 共用体名 { 类型名1 共用体成员名1; 类型名2 共用体成员名2; …… 类型名n 共用体成员名n; }; 例如: union exam { int a; float b; char c; }; 9.2.2 共用体变量的定义 同结构体(三种方法) 9.2.4 注意事项 1. 共用体类型数据的多个成员共用一个内存段,但每一瞬时只有一个成员起作用。 2. 共用体变量中起作用的是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。 3. 共用体变量的地址和它的成员的地址都是同一地址。 printf(“%u,%u,%u\n”,&x.a,&x.b,&x.c); 4. 共用体与结构体可相互嵌套定义。 9.3 用typedef说明新类型 5. 共用体与结构体所占存储空间的区别: 共用体变量所占字节数: 与其成员中所占字节数最大的那个成员相等。 结构体变量所占字节数:是其成员所占字节数的总和。 例 union data struct data { int i; { int i; char ch; 或 char ch; float f; float f; }a; }a; 上面定义的共用体变量a占4个字节(因为一个实型变量占4个字节),结构体占2+1+4=7个字节。 * 9.1.1 结构体类型说明 声明一个结构体类型的一般形式为: struct 结构体名 {类型名1 成员名表1; 类型名2 成员名表2; }; 如: struct date { int year; int month; int day; }; 9.1.2 定义结构体类型变量的方法 1. 说明结构体类型的同时定义结构体数据 struct student { char name[12]; char sex; struct date birthday; float sc[4]; }std,pers[3],*pstd; 2. 直接定义结构体类型的数据 在说明一个无名结构体类型的同时,直接进行定义。结构体名可省略,写成: struct { char name[12]; char sex; struct date birt