これを,リスト1のプログラムを使って説明しよう.最初,ポインター i_ptrの値(アドレス)は0x90ee40は,このプログラムでは全く意味のないもの である.実行環境--パソコンや実行するタイミングなど--が変化すれば,このポインター が指し示しているデータオブジェクトの値0x57e58955も変わってしまう.同じプロ グラムなのに,出力が変わるようでは役に立たない.
ポインターを使う場合,このプログラムの後半(11行目)に示しているように,使うアドレスを明示
的に格納しなくてはならない.これをポインターの初期化と呼び,ポインターを使
う場合の基本的な約束である.これはプログラマーの仕事で,初期化を忘れてもコンパイ
ラーはエラーメッセージを表示してくれない.
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int i=0x12345678;
6 int *i_ptr;
7
8 printf("i_ptr に格納されているアドレス\t\t%p\n",i_ptr);
9 printf("i_ptr が示すデータオブジェクトの値\t%#x\n",*i_ptr);
10
11 i_ptr=&i;
12 printf("i のアドレス\t\t\t\t%p\n",&i);
13 printf("i_ptr に格納されているアドレス\t\t%p\n",i_ptr);
14 printf("i_ptr が示すデータオブジェクトの値\t%#x\n",*i_ptr);
15
16 *i_ptr=0xfedcba98;
17 printf("iの値\t\t\t\t\t%#x\n",i);
18
19 return 0;
20
21 }
i_ptr に格納されているアドレス 0x90ee40 i_ptr が示すデータオブジェクトの値 0x57e58955 i のアドレス 0xbfacc0cc i_ptr に格納されているアドレス 0xbfacc0cc i_ptr が示すデータオブジェクトの値 0x12345678 iの値 0xfedcba98