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