union u
{
int a;
float b;
char c[10];
};
int main()
{
union u abc;
printf("\n%d",sizeof(abc));
}
输出:12 我希望可以将输出为10.sizeof(焦炭)为1。因此,对于10我希望它是10.一个人能解释我为什么我们得到12.的sizeof字符数组不正确打印
union u
{
int a;
float b;
char c[10];
};
int main()
{
union u abc;
printf("\n%d",sizeof(abc));
}
输出:12 我希望可以将输出为10.sizeof(焦炭)为1。因此,对于10我希望它是10.一个人能解释我为什么我们得到12.的sizeof字符数组不正确打印
这是因为可能至少有一个float
或int
数据类型有4个字节的对齐要求。所以struct
得到2个字节的填充(所以sizeof(struct u) % 4 == 0
)。
如果您的编译器支持它们以避免填充,您可以使用__attribute__((packed))
或类似的功能,但除非预先存在符合的数据,否则不方便。考虑一下包装struct u
元素的数组将具有未对齐的成员的事实。
有填充。 – jxh
标题:'sizeof char array',(char c [10])。代码:'sizeof(abc)',(工会)。为什么要声称一件事,然后证明另一件事 – ThingyWotsit
你问关于数组(标题)的大小还是联合(代码)的大小? – chux