#include<stdio.h>
struct{int n1; char n2; }test;
main(){
printf("test.n1は、アドレス0x%xから%dバイト分\n",&test.n1,sizeof(test.n1));
printf("test.n2は、アドレス0x%xから%dバイト分\n",&test.n2,sizeof(test.n2));
}
私のマシンでの実行結果は、test.n1は、アドレス0x454から2バイト分 test.n2は、アドレス0x456から1バイト分あ、そういえば、sizeof演算子は今回初登場ですね。sizeof演算子は、オペランドのサイズをバイト数で返します。つまり私のマシンは、int型変数(test.n1)は2バイト、char型変数(test.n2)は1バイトという訳です。
struct{int n1; char n2; }test;
の、structの部分をunionに変更して下さい。以下のようになります。
#include<stdio.h>
union{int n1; char n2; }test;
main(){
printf("test.n1は、アドレス0x%xから%dバイト分\n",&test.n1,sizeof(test.n1));
printf("test.n2は、アドレス0x%xから%dバイト分\n",&test.n2,sizeof(test.n2));
}
私のマシンでの実行結果は、test.n1は、アドレス0x454から2バイト分 test.n2は、アドレス0x454から1バイト分共用体変数testのメンバn1とn2の先頭アドレスが、どちらも0x454になっていることを確認して下さい。
つづく。