2 ポインターとは何か?

ポインターとは何か?--と問われると,最も適切な答えは「ポインターはオブジェクトの アドレスである」 [1]であろう.そうするとオブジェクトとは何か?--という ことになる.オブジェクトとはメモリー上のデータ領域のことでアドレスがあり,型を持 つのでサイズもある.ポインターはオブジェクトの先頭アドレスを示すことにより,オブ ジェクトを指し示す.実際には,ポインター変数にオブジェクトの先頭アドレスを格納し ているのである.先頭アドレスのみならず,オブジェクトの大きさもどこかに情報として 持っていることを忘れてはならない.

このことを具体例をつかって,説明しよう.リスト2のプログ ラムでは,pがポインター変数でhogeがオブジェクトである.この関係は図 1のように表すことができる.

   1 #include <stdio.h>
   2 
   3 int main(void)
   4 {
   5   int hoge=3;
   6   int *p;
   7 
   8   p=&hoge;
   9 
  10   printf("hoge=%d\n",*p);
  11 
  12   return 0;
  13 }


\fbox{実行結果}
hoge=3
図 1: ポインターpとオブジェクトhogeの関係.
\includegraphics[keepaspectratio, scale=1.0]{figure/pt_for_hoge.eps}

このような結果が得られるのは,リスト2の10行目でポインター phogeを指し示すからである.オブジェクトとポインターの関係は8行目で hogeで決められている; オブジェクトの先頭アドレス2 をポインター変数に代入している.

更にコンピューターの内部まで踏み込めば,10行目のprintf()関数では次のような ことが行われている. -4pt




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


no counter