第17讲 共用体 链表
第17讲 共用体 链表
如何定义数据类型存储下需要一个数据 表格中的数据 单元,但不同 情况下存不同 的数据。 姓名 年龄工作 所在办公室 name age ob (或班级 class) 共用体类型 教师计算机基础教学部 union DEPT 学生0600001 fruct person union DEPT char name[10] t int class; Int age char office[10] char job :/先定义共用体类型*/ union DEPt struct person t int class; [char name[10] char office[10] Int agei 3 depa: char job union DEPT depa;
2 如何定义数据类型存储下列 表格中的数据 姓名 name 年龄 age 所在办公室office 工作 job (或班级class) struct person {char name[10]; int age; char job; depa; }; •需要一个数据 单元,但不同 情况下存不同 的数据。 李四 21 学生 0600001 张三 30 教师 计算机基础教学部 union DEPT { int class; char office[10]; } union DEPT { int class; char office[10]; };/*先定义共用体类型*/ struct person {char name[10]; int age; char job; union DEPT depa; }; •共用体类型 union DEPT
include <stdio. h> struct person i char name[10]: 例6-41 Int age char job union dEpt printf nName Age Job Classoffice \n") for(i=0; i<4; i++) 币f(ps[]job==s)输出的时候同样先判断,再决定输出什么 printf("%-10s%-6d%-3c%-10dn" ps[i]. name, ps[i] age, ps[i]. job, ps[i]. depa. class) else printf("%-10s%-6d%-3c%-10sMn" ps[i]. name, ps[i] age, ps[i]. job, ps[i]. depa. office) scanfc %od, &ps[i]. depa. class); else if(ps[i]. job==t) scanfc %s", ps[i]. depa. office)
3 #include <stdio.h> struct person { char name[10]; int age; char job; union DEPT { int class; char office[10]; }depa; }; void main() { struct person ps[4]; int n,i; for(i=0;i<4;i++) {scanf("%s %d %c",ps[i].name,&ps[i].age,&ps[i].job); if(ps[i].job==‘s’) /*要先判断job是什么,然后决定存什么*/ scanf("%d",&ps[i].depa.class); else if(ps[i].job=='t') scanf("%s", ps[i].depa.office); } 例6-41 printf("\nName Age Job Class/office\n"); for(i=0;i<4;i++) { if(ps[i].job==‘s’)/*输出的时候同样先判断,再决定输出什么*/ printf("%-10s%-6d%-3c%-10d\n", ps[i].name, ps[i].age,ps[i].job,ps[i].depa.class); else printf("%-10s%-6d%-3c%-10s\n", ps[i].name,ps[i].age,ps[i].job,ps[i].depa.office); } }
共用体类型数据的特点 union example short x: 0F15 ax ach[O] char ch[4]: OF16 0F17 0F18 a ch[3] 在内存中: sizeof( unIon X)取决于占空间最多的那个成 员变量 2ax和ach处于同样的地址 3同一内存单元在每一时刻只能存放一个成员的值;
4 共用体类型数据的特点 ▪ union example { short x; char ch[4]; }a; a.ch[0] a.ch[1] a.ch[2] a.ch[3] a.x 0F15 0F16 0F17 0F18 ◼在内存中: 1.sizeof(union xxx)取决于占空间最多的那个成 员变量 2.a.x和a.ch处于同样的地址 3.同一内存单元在每一时刻只能存放一个成员的值;
例6-40读取16位整型数据的高字节数据 Include <stdio h union data short i char c[2]: :腆这种类型的变量可以看成一个整型变量,也可以看成 两个字符型变量,字符型变量对应的ASc码即对应整 型数的高、低字节*/ pedef union data DATA: 0F1500110011r i rc[oj void maino 0F1600111000 rc[1] I DATA r *s=&r. s->i=0x3833:/换算成二进制为001110000110011*/ rinf( \n) printf"c[o]=%d, c[1]=%d\n,r c[o],s->c[1D
5 例6-40 读取16位整型数据的高字节数据 #include <stdio.h> union data { short i; char c[2]; };/*这种类型的变量可以看成一个整型变量,也可以看成 两个字符型变量,字符型变量对应的ASCII码即对应整 型数的高、低字节*/ typedef union data DATA; void main() { DATA r,*s=&r; s->i=0x3833; /*换算成二进制为00111000 00110011 */ printf("\n"); printf("c[0]=%d,c[1]=%d\n",r.c[0],s->c[1]); } 00110011 00111000 r.c [0] r.c[1] 0F15 r.i 0F16