2 ポインターの初期化

ポインターは,データオブジェクトの先頭アドレスを格納する変数である.その中にデー タのアドレスを格納してはじめて,ポインターが意味のあるデータとなる.

これを,リスト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 }
\fbox{実行結果}
i_ptr に格納されているアドレス          0x90ee40
i_ptr が示すデータオブジェクトの値      0x57e58955
i のアドレス                          0xbfacc0cc
i_ptr に格納されているアドレス         0xbfacc0cc
i_ptr が示すデータオブジェクトの値      0x12345678
iの値                                0xfedcba98



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年2月16日


no counter