連載
» 2014年09月05日 11時00分 公開

【問題9】配列とポインタの深い関係完全マスター! 組み込みC言語プログラミング(10)(2/4 ページ)

[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]

ポインタの概要

 ポインタは、「何かを指し示すデータ」をいいます。「ポインタ変数にはアドレスが格納される」とも説明できますが、その意味は、プログラムの実行時に変数や関数などはメモリに配置されていて、アドレスがそれらの場所を表しているからなのです。


 例えば

int n;

 と宣言すると、nはintを格納する箱のようなものですから、メモリのどこかにintの領域が確保されます。そのアドレスが「nへのポインタ」であるわけです。

 ポインタ変数の宣言は、

int *p;

 のように、名前の前にアスタリスク(*)を記述します。するとpは「intへのポインタ」を格納する変数と宣言されます。

 ポインタに付随する演算に*(間接参照演算子)と&(アドレス演算子)の2つがあります。&はオペランドのアドレスを求める演算子で、

p = &n;

 と書くと、nのアドレスを求め、それがpに代入されるので、結果としてpはnを指し示す(ポイントする)ことになります。イメージとしては次のようなもので、pの箱の中の青丸がnのアドレスを表現しています。すると青矢印線のように、pはnを指すようになります。

photo

 *はポインタをオペランドとする演算子で、ポインタが指すオブジェクトの値を求めます。

 例えば、

int n, *p, a;
n = 100;
p = &n;
a = *p + 20;

 では、結果としてaに120が代入されます。2行目でnに100が代入され、3行目でpはnをポイントするようになり、4行目の*pは100になるからです。

Copyright © ITmedia, Inc. All Rights Reserved.