検索
連載

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

C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回はC言語の難所の1つ、ポインタに関する問題を解説していきます。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

ポインタの概要

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


 例えば

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.

ページトップに戻る