C语言-联合

简介: C语言-联合

联合定义

是一种特殊的自定义类型,它包含一系列的成员,特征是这些成员共用同一块空间(因此联合也叫共用体)

联合特点

(1)0联合的成员共用同一块内存空间,因此联合变量的大小,至少是最大成员的大小(因为联合的空间大小至少能存放最大的成员)

(2)由于联合的成员共用同一块空间,所以修改一个成员变量的值时,另外一个成员变量的值也会被修改,如修改i时会把c也修改了;同理,修改c时i也会被修改。

联合大小的计算

(1)联合的大小至少是最大成员的大小。
(2)当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

1. #define  _CRT_SECURE_NO_WARNINGS  1
2. #include<stdio.h>
3. union Un
4. {
5.  char c;//1
6.  int i;//4
7. };
8. 
9. union Un2
10. {
11.   char c[5];//5
12.   int i;//4
13. };
14. 
15. union Un3
16. {
17.   char c[5];//1 5
18.   char ch;//1
19. };
20. 
21. union Un4
22. {
23.   short s[5];//2 10
24.   int i;//4
25. };
26. 
27. int main()
28. {
29.   union Un u = { 67 };
30. 
31.     //联合的大小至少是最大成员的大小
32.   printf("%d\n", sizeof(u));//4 成员c的最大对齐数是1,成员i的最大对齐数4,因此联合变量u的最大对齐数是4,且大小是4的整数倍,因此大小为4
33. 
34.     //联合的成员共用同一块空间
35.   printf("%p\n", &u);//0055F888
36.   printf("%p\n", &(u.c));//0055F888
37.   printf("%p\n", &(u.i));//0055F888
38. 
39.   printf("%c\n", u.c);//C
40.   printf("%d\n", u.i);//67
41. 
42.   //修改i时,c会被修改
43.   u.i = 68 ;
44. 
45.   printf("%c\n", u.c);//D
46.   printf("%d\n", u.i);//68
47. 
48.   //修改c时,i会被修改
49.   u.c = 'E';
50. 
51.   printf("%c\n", u.c);//D
52.   printf("%d\n", u.i);//69
53. 
54. 
55.     union Un2 u2 = { 'A','B','C','D','E'};
56.   printf("%d\n", sizeof(u2));//8 成员c的最大对齐数是1,大小是5,成员i的最大对齐数4,因此联合变量u2的最大对齐数是4,大小至少是5,且大小是4的整数倍,因此大小为8
57. 
58.     union Un3 u3 = { 'A','B','C','D','E' };
59.   printf("%d\n", sizeof(u3));//5 成员c的最大对齐数是1,大小是5,成员ch的最大对齐数为1,因此联合变量u3的最大对齐数是1,大小至少是5,且大小是1的整数倍,因此大小为5
60. 
61.   union Un4 u4 = { 1, 2, 3, 4, 5 };
62.   printf("%d\n", sizeof(u4));//12 成员s的最大对齐数是2,大小是10,成员i的最大对齐数为4,因此联合变量u4的最大对齐数是2,大小至少是10,且大小是4的整数倍,因此大小为12
63. 
64.   return 0;
65. }


相关文章
|
4月前
|
算法 编译器 C语言
c语言中的发展历程承
c语言中的发展历程承
30 0
|
4月前
|
存储 安全 编译器
C语言(13)----联合和枚举
C语言(13)----联合和枚举
34 1
|
17天前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
|
3月前
|
存储 C语言
深入挖掘C语言之——联合
深入挖掘C语言之——联合
21 2
|
3月前
|
C语言
【C语言】:枚举和联合
【C语言】:枚举和联合
18 0
|
4月前
|
存储 程序员 C语言
C语言中的函数指针及其应用技术
C语言中的函数指针及其应用技术
56 2
|
4月前
|
存储 C语言
C语言——联合(共用体)~~详解
C语言——联合(共用体)~~详解
24 0
|
自然语言处理 Unix Java
C语言的发展及特点
C语言的发展及特点
113 0
|
4月前
|
算法 Unix 编译器
C语言的发展及其特点
C语言是一种广泛使用的计算机编程语言,它的起源可以追溯到20世纪70年代。作为计算机编程领域的一颗璀璨明星,C语言的发展经历了多个阶段,并在各个领域中发挥着举足轻重的作用
58 0
|
4月前
|
存储 C语言
C语言基础专题 - 通过案例历学 - 共用体
C语言基础专题 - 通过案例历学 - 共用体
38 0