作者:天气不再变化_207 | 来源:互联网 | 2022-10-15 08:59
当我输入以下代码时,得到的结果是32个字节。它应该是28个字节。为什么我得到那个结果?
//size of union variable
union U {
int x[7];
double y[3];
}z;
int main(){
printf("%d",sizeof(z));
return 0;
}
molbdnilo..
10
像结构一样,对工会进行填充以同意其成员的所需对齐方式。
double
在您的平台上以8的倍数对齐,而32是8的最小倍数,即至少28。
1> molbdnilo..:
像结构一样,对工会进行填充以同意其成员的所需对齐方式。
double
在您的平台上以8的倍数对齐,而32是8的最小倍数,即至少28。
这个答案应该加上为什么重要(即在数组中使用)。
@akshaykishore这是一个工会。
@CaitLANJenner但要小心。[正在写入的`struct`的填充字节可以更新](https://port70.net/~nsz/c/c11/n1570.html#6.2.6.1p6):“当值存储在具有结构或联合类型的对象,包括在成员对象中,**与任何填充字节相对应的对象表示形式的字节采用未指定的值**。” 在这种情况下,在示例联合中将值分配给y [2]可能会更改x [6]的值。诚然,直接给自己分配struct值时,这仅可能发生。