読者です 読者をやめる 読者になる 読者になる

C言語学習log:ポインタ

やさしいC 第3版 』Lesson9は「ポインタ」です。

アドレス

変数の値はコンピュータの「メモリ」に記憶されます。「ポインタ」はメモリの位置を直接あらわす機能で、メモリ上の位置を直接あらわす言葉を「アドレス」といいます。

変数の値が格納されているメモリのアドレスを知るには、アドレス演算子の「&」を使い、「&変数名」と表記します。以下のように変数aのアドレスを出力することができます。

printf("%p\n", &a);

ポインタ

「ポインタ」はアドレスを格納する特殊な変数です。ポインタの宣言は、

型名 *ポインタ名;

というように行います。
なお、*はポインタの宣言であることをあらわす記号です。

ポインタpAに変数aのアドレスを格納するには、

pA = &a;

と表記し、pAの値が、変数aの場所を示しています。

ポインタに対して、*演算子(間接参照演算子)を使うと、元の変数の値を知ることができます。上記の「pA = &a;」の場合、「*pA」を使うとポインタが指している変数aの値を知ることができます。

引数とポインタ

関数に実引数を渡す際には、実引数の「値」だけが関数内に渡される(値渡し)ので、原則として、関数内で実引数を変更することはできません。しかし、仮引数をポインタとして定義することで、実引数のアドレスが関数に渡され(参照渡し)、関数内で実引数側を変更することができます。

呼び出し元(実引数:アドレス)→関数の定義(仮引数:ポインタ)

なお、関数内で実引数の値を変更しないことを示すためには、仮引数にconstという指定をつけます。

「引数とポインタ」の辺りは、わかったのかわかってないのか微妙・・・。