AVRマイコンで始めるC言語の使い方
ポインタ
ポインタの宣言
ポインタの宣言は以下のようにします。
int *p;
アスタリスク*はポインタを表します。
pはポインタつまりメモリアドレスを示します。
*pはint型のデータを示し、2バイト分のメモリ領域を確保します。
メモリ
┏━━━━━━━━┓
アドレスp ┃
┃ *pの下位1バイト
┃------------------┃
┃
┃ *pの上位1バイト
┗━━━━━━━━┛
配列
C言語では関数で直接配列を渡すことができません。そのため、ポインタで渡すことになります。つまり引数にポインタを使います。
int d[3];
int *p;
&d[0]はアドレスです。ポインタを使うと p = &d[0];となります。
メモリ
アドレス ┏━━━━━━━━┓ 値
&d[0] ┃
┃ ┓
┃------------------┃ ┃
d[0]
┃
┃ ┛
┣━━━━━━━━┫
&d[1] ┃
┃ ┓
┃------------------┃ ┃
d[1]
┃
┃ ┛
┣━━━━━━━━┫
&d[2] ┃
┃ ┓
┃------------------┃ ┃
d[2]
┃
┃ ┛
┗━━━━━━━━┛
ポインタのインクリメント
上記例で、p = &d[0]とします。p++は次のアドレス&d[1]を示します。d[]はint型ですのでp++するとアドレスは2つ自動的に進みます。
char d[3]の場合、p++するとアドレスが1つ進みます。
long d[3]の場合、p++するとアドレスが4つ進みます。