ポインターとは何か?--と問われると,最も適切な答えは「ポインターはオブジェクトの
アドレスである」 [
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 }
hoge=3
図 1:
ポインターpとオブジェクトhogeの関係.
|
このような結果が得られるのは,リスト2の10行目でポインター
pがhogeを指し示すからである.オブジェクトとポインターの関係は8行目で
hogeで決められている; オブジェクトの先頭アドレス2 をポインター変数に代入している.
更にコンピューターの内部まで踏み込めば,10行目のprintf()関数では次のような
ことが行われている.
-4pt
- ポインター変数pに格納されているアドレスを取り出す.
- 取り出されたアドレスは整数型のオブジェクト3の先頭アドレスなので,そこから4バイトのデータを取り出す.
- 取り出されたデータ--32ビットの1と0の並び--を%dの書式で書き出す.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成19年5月29日