アルゴリズムとプログラミング
C言語において、整数変数 x のアドレスが 0x1000 であり、x の値が 42 であるとする。ポインタ変数 p を `int *p = &x;` と宣言したとき、`*p` の値と `p` の値の組合せとして正しいものはどれか。
ア.*p = 0x1000、p = 42
イ.*p = 42、p = 42
ウ.*p = 0x1000、p = 0x1000
エ.*p = 42、p = 0x1000正解
解説
ポインタは「住所が書かれた手紙」のようなもの。p という手紙には「住所 0x1000 番地」が書いてある(p=0x1000)。その住所に実際に行ってみると(*p でアクセスすると)、そこには 42 という値が住んでいる(*p=42)。
なぜ エ が正解か
`p = &x` は「x のアドレス(0x1000)を p に格納する」という代入。したがって p の値は 0x1000(アドレス)となる。`*p` は「p が指すアドレス(0x1000)にある値を参照する」間接参照であり、x の値である 42 となる。よって *p=42、p=0x1000 が正しい。
出典: AI生成問題(学習用)