![]() ![]() |
|
C语言程序设计(第7章结构体与共用体)5 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 13:59:55 文章录入:杜斌 责任编辑:杜斌 | |
|
|
所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为: union 共用体名 {成员表列}; 7.5.1 共用体的定义 union data { int a ; float b; doublec; chard; }obj; 该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量obj。共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。 [例7 - 8 ] union data /*共用体*/ { int a; float b; double c; char d; }mm; struct stud /*结构体* / { int a; float b; double c; char d; }; main( ) { struct stud student; printf("%d,%d",sizeof(struct stud),sizeof(union data)); } 运行程序输出: 15,8 程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的共用体类型实际占用存储空间为其最长的成员所占的存储空间。详细说明如图7 - 6所示。
对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。
for(i=0;i<6;i++) printf("%d,",unit.byte[i]); /*按字节以十进制输出*/ printf("\n"); } 运行程序: enter year: 1976 enter month: 4 enter day: 23 year=1976 month=4 day=23 184,7,4,0,23,0 从程序的输出结果来看, 1976占两个字节,由第0、1字节构成,即7×256+184=1976。4同样占两个字节,由第2、3字节构成, 0×256+4=4,23由第4、5字节构成, 23=0×256+23。 思考题: 在下面这个程序中,如果通过联合体的数组mem_num输出结构asd三个成员char name[6];int age;char adr[10];的值,后面的语句应怎样写? void main() { int *p; union mem_union { struct mem_struct { char name[6]; int age; char adr[10]; }asd; unsigned char mem_num[sizeof(struct mem_struct)]; }worm; .... .... } |
|
![]() ![]() |