-1
変数のアドレス空間が私のプログラムで変化しているようです。最初に、以下のプログラムからの出力を得ました。Cプログラムで変数のアドレス空間が変更される
int main(){
int a = 10;
int *b = &a;
int **c = &b;
int ***d = &c;
printf("a - address: %p, value: %x\n",&a ,a);
printf("b - address: %p, value: %x\n",&b ,b);
printf("c - address: %p, value: %x\n",&c ,c);
printf("d - address: %p, value: %x\n",&d ,d);
printf("size: a - %d, b - %d c- %d, d - %d", sizeof(a), sizeof(b), sizeof(c), sizeof(d));
}
出力:
a - address: 0x7ffc08c5866c, value: a
b - address: 0x7ffc08c58660, value: 8c5866c
c - address: 0x7ffc08c58658, value: 8c58660
d - address: 0x7ffc08c58650, value: 8c58658
0xc
としてa
とb
のアドレスの違いがあります。
その後、私が追加:
int f = 10;
私はこの出力を得る:
f - address: 0x7fff1945656c, value: a
a - address: 0x7fff19456568, value: a
b - address: 0x7fff19456560, value: 19456568
c - address: 0x7fff19456558, value: 19456560
d - address: 0x7fff19456550, value: 19456558
a
と変更b
のアドレスの違いを。なぜ誰かが私に言うことができますか?
コンパイラはあなたの変数のメモリを好きなように整理することができます...詳細な説明が必要な場合は、Cで整列と埋め込みについて読むこともできます。ポインタ値を '%p'で表示することも忘れないでください。 –
同じプログラムを2回実行する異なるアドレスを取得しますか?これは、スタック配置のランダム化による可能性があります。 – 1201ProgramAlarm
いいえ、intの前にint宣言を追加すると、aのアドレスとbのアドレスの差は12から4へと12へと変化します。 –