c语言课件14_tt_2共用体
- 格式:ppt
- 大小:100.00 KB
- 文档页数:14
C语⾔共⽤体(Union)结构体和共⽤体的区别在于:结构体的各个成员会占⽤不同的内存,互相之间没有影响;⽽共⽤体的所有成员占⽤同⼀段内存,修改⼀个成员会影响其余所有成员。
结构体占⽤的内存⼤于等于所有成员占⽤的内存的总和(成员之间可能会存在缝隙),共⽤体占⽤的内存等于最长的成员占⽤的内存。
共⽤体使⽤了内存覆盖技术,同⼀时刻只能保存⼀个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
共⽤体也是⼀种⾃定义类型,可以通过它来创建变量,例如:1. union data{2. int n;3. char ch;4. double f;5. };6. union data a, b, c;上⾯是先定义共⽤体,再创建变量,也可以在定义共⽤体的同时创建变量:1. union data{2. int n;3. char ch;4. double f;5. } a, b, c;如果不再定义新的变量,也可以将共⽤体的名字省略:1. union{2. int n;3. char ch;4. double f;5. } a, b, c;共⽤体 data 中,成员 f 占⽤的内存最多,为 8 个字节,所以 data 类型的变量(也就是 a、b、c)也占⽤ 8 个字节的内存,请看下⾯的演⽰:1. #include <stdio.h>2.3. union data{4. int n;5. char ch;6. short m;7. };8.9. int main(){10. union data a;11. printf("%d, %d\n", sizeof(a), sizeof(union data) );12. a.n = 0x40;13. printf("%X, %c, %hX\n", a.n, a.ch, a.m);14. a.ch = '9';15. printf("%X, %c, %hX\n", a.n, a.ch, a.m);16. a.m = 0x2059;17. printf("%X, %c, %hX\n", a.n, a.ch, a.m);18. a.n = 0x3E25AD54;19. printf("%X, %c, %hX\n", a.n, a.ch, a.m);20.21. return 0;22. }运⾏结果:4, 440, @, 4039, 9, 392059, Y, 20593E25AD54, T, AD54这段代码不但验证了共⽤体的长度,还说明共⽤体成员之间会相互影响,修改⼀个成员的值会影响其他成员。