ポインタは、変数のアドレスを格納するための変数・・・。
たいていの変数は、メモリ上に割り当てられているので、そのメモリのアドレスがわかれば値にアクセスできる・・・。
そのメモリのアドレスを格納することができるのがポインタと呼ばれる特殊な変数・・・。
ここでは、変数、変数のアドレス、ポインタ、ポインタが指すメモリ領域の値を出力し、それらの関係をみていく・・・。
int型変数x、そしてxのアドレスを格納するためのポインタpを宣言する・・・。
ポインタは、
<ポインタが指す変数の型> *<ポインタ名>
と宣言する・・・。
こんな感じでxとpを宣言・・・。
つづいて、変数xに値10を代入する・・・。
そのあと、変数xのアドレスをpに代入する・・・。
アドレスの代入には、アドレス演算子('&')を使う・・・。
そしてprintfで、
- 変数
- 変数のアドレス
- ポインタ
- ポインタが指すメモリ領域の値
の4つの値を出力する・・・。
変数の値、ポインタの指す値は、"%d"で普通の整数として出力・・・。
アドレスおよびポインタは、"%08x"を使って8桁の符号なし16進数整数として出力する・・・。
ポインタの指す値を取り出すには、間接参照演算子('*')を使って、
*<ポインタ>
と書く・・・。
そのため、
printf("*p = %d\n", *p);
としている・・・。
実行すると、
$ ./pointer x = 10 &x = 0xec644e84 p = 0xec644e84 *p = 10
こんな感じで出力される・・・。
変数とポインタの指す値が同じであることがわかる・・・。