これを,リスト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