C言語の基礎

int は4バイト、ポインタは8バイトとする。int 型へのポインタ p の値(番地)が 0x1000 のとき、p + 3 の値はどれか。

  1. A0x100C
  2. B0x1012
  3. C0x1018
答えと解説を見る

正解:A. 0x100C

ポインタに整数を足すと、指している型の大きさを単位として進みます。int は4バイトなので、p + 3 は 3 × 4 = 12 バイト先、つまり 0x1000 + 0xC = 0x100C を指します。p + 3 は配列の要素 p[3] の番地で、*(p + 3) と p[3] は同じ意味です。char 型へのポインタなら1バイトずつ、double 型(8バイト)へのポインタなら8バイトずつ進みます。

  • A. 正しい。4バイトずつ3つ進むので、12 = 0xC を足します。
  • B. 12バイトを16進数に直さずに「12」のまま足した値です。10進数の12は16進数では 0xC です。
  • C. ポインタ自身の大きさ(8バイト)ずつ進むと考えた場合の値です(3 × 8 = 24 = 0x18)。
この分野を解く 分野ページへ

C言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

C言語の基礎のほかの問題

  1. int は4バイト、ポインタは8バイトとする。上のプログラムを実行したときの出力として、正しいものはどれか。
  2. int は4バイトとする。上のコードを実行したときの出力として、正しいものはどれか。
  3. 文字列を入れた char の配列について、上のコードを実行したときの出力として、正しいものはどれか。
  4. 上の宣言の後に、ア「p = t;」、イ「*p = 'x';」、ウ「q = t;」、エ「*q = 'x';」のどれかを書く。コンパイルエラーになるものの組み合わせはどれか。
  5. 関数ポインタの配列を使った上のプログラムを実行したときの出力として、正しいものはどれか。