次のテスト プログラムを考えてみましょう ( codepad の実行)。
#include <stdio.h>
#include <string.h>
struct camp {
char b[8];
};
int main()
{
struct camp c;
strcpy(c.b, "Hello");
c.b[5] = '\0';
printf("c size: %d\nAddress (amp): %d :: %d\n", sizeof(c), &c, c);
printf("Address of b: %d :: %d\n", &(c.b), c.b);
return 0;
}
出力例:
c size: 8
Address (amp): -1082463628 :: 1819043144
Address of b: -1082463628 :: -1082463628
&(c.b)
と(printf の 2 回目の呼び出し) で指定されたアドレスc.b
は同じですが、同じ for struct camp c
(printf の最初の呼び出し) は異なるアドレスを返します。さらに、または&c
と同じです。&(c.b)
c.b
正確には何が起こっているのですか?