同級生が投稿したコードを見ていますが、この例のために単純化されています。
int main()
{
int n = 0x4142;
char * a = (char *) &n;
char * b1 = (((char *) &n) + 1);
char * b2 = (((int) &n) + 1);
printf("B1 Points to 0x%x - B2 Points to 0x%x\n", b1, b2);
printf("A Info - 0x%x - %c\n", a, *a);
printf("B1 Info - 0x%x - %c\n", b1, *b1);
printf("B2 Info - 0x%x - %c\n", b2, *b2);
return 0;
}
出力は次のとおりです。
B1 Points to 0xcfefb03d - B2 Points to 0xcfefb03d
A Info - 0xcfefb03c - B
B1 Info - 0xcfefb03d - A
Segmentation fault (core dumped)
b2 を印刷しようとすると、セグメンテーション違反が発生します。出力には、セグフォルトの代わりに次の行を含める必要があると思います。
B2 Info - 0xcfefb03d - A
これはなぜですか?b1 と b2 は両方とも char* であり、両方とも同じアドレスを指しています。これは、sizeof(char*) == 8 および sizeof(int) == 4 の 64 ビット マシン上にあります。