私は作成したユニオンのサイズを見るために単純なコードを試しています。サイズは52で、サイズは52と言います。同じサイズの別の文字列を試してみました。余分な2バイトはどこから来ますか?sizeof unionは、常にその中の最大のデータ型のサイズですか?
ここコード
union Name
{
int y;
float x;
char name[50];
}name;
int main(int argv, char *argc[])
{
char name2[50];
printf("%d",sizeof(name));
printf("\n%d",sizeof(name2));
return 0;
}
結果は52と50
は 'sizeof'の値'のための "%d" を '使用しないでください。 ''%zu ''を使用してください。 –
ユニオンのサイズは、その最も大きいアライメント制限メンバーの*アライメント*に丸められます*。 –
@TomKarzes通常、実際には真ですが、標準では上限はありません。おそらく、実装特有の拡張があり、切り上げは行われません –