这个不一定哦,编译器会存在变量对齐,也就是说长度比所有成员加起来更大。你上机试试看就知道。
共同体(union)中的所有成员变量共用同一块内存空间,因此共同体变量的大小取决于最长的成员变量长度。可以通过计算每个成员变量的大小,然后找出最大值来确定共同体变量的大小。举个例子:
#include <stdio.h>
#include <string.h>
union example {
int a;
double b;
char c[10];
};
int main() {
union example e;
int size_a = sizeof(e.a);
int size_b = sizeof(e.b);
int size_c = sizeof(e.c);
int max_size = size_a;
if (size_b > max_size) {
max_size = size_b;
}
if (size_c > max_size) {
max_size = size_c;
}
printf("The size of the union is %d bytes\n", max_size);
return 0;
}
在这个例子中,我们定义了一个共同体 example,包含一个 int 类型的成员变量 a,一个 double 类型的成员变量 b,和一个长度为 10 的字符数组成员变量 c。在主函数中,我们使用 sizeof 函数计算每个成员变量的大小,然后找出最大值,即为共同体变量的大小。运行上面的程序,输出为:
The size of the union is 10 bytes
因为字符数组成员变量 c 的大小为 10,是所有成员变量中最大的。因此,共同体变量 example 的大小为 10 字节。
double 是 8 , char 是 1,float 是 4, ua 最大为 8 ,最大对齐数位是 8 , 结构体总大小为最大对齐数的整数倍得 24.