3 ポインター(10章)

今までのサンプルプログラムは、FORTRANと置き換えが可能です。対応するFORTRANの命令 があり、理解は容易でしょう。しかし、ここで説明するポインター(pointer)はFORTRANに ない概念です。これこそ、CとFORTRANの大きな違いで、C言語のもっとも大きな特徴です。 そのため、C言語の勉強で、ここで挫折する人が多く居ます。みなさん、がんばって勉強 してください。覚えることなど無く、その内容を理解すれば、ポインターなんか難しくあ りません。

リスト2の普通の変数v1, v2, v3は、整数を格納する変数です。コンパイラー が確保した領域に整数を格納します。コンピューターのメモリには、すべて、アドレス (番地)がついています。各アドレスには、1バイト(=8ビット)のデータが対応しています。 このアドレスに従い、メモリー内のデータや命令を参照しています。プルグラムの実行時 は、v1等の変数が呼ばれると、それに対応したアドレスが呼ばれ、データの参照をします。

これら普通の変数のアドレスを参照したいときは、&v1のように、変数の前に&をつけま す。これで、その変数の先頭アドレスを直接見ることが出来ます。例えば、int型の変数 であれば、4バイト1のメモリー領域が必要なので、連続した4つのアドレスのメモリー領 域を使用します。その先頭アドレスを&v1のようにして参照します。

定義 int v1;
データの参照 v1
アドレスの参照 &v1

一方、リスト2のポインターp1,p2,p3はアドレスを表 す変数です。通常の変数とは異なり、コンパイラーにより確保された領域にアドレスを格 納します。アドレス、即ち、値の場所を示すものだから、ポインターといいます。ポイン ターもアドレスというデータを格納するため、連続したメモリー領域が必要です。秋田高 専のパソコンは32ビットアドレッシングのため、4バイトのメモリー領域が必要です。

プログラム内で*p1のように呼ばれると、p1が示しているアドレスの値を参照します。p1 は先頭アドレスを示しているので、型に応じたバイト数を呼び出すことになります。その ため、ポインターにも、型が必要になります。

プログラム内でp1と呼ぶと、そのポインターが示しているアドレスを参照します。また、 &p1と呼び出すと、ポインターの先頭アドレスを参照します。

        定義 int *p1;
        ポインターが示しているデータの参照 *p1
        ポインターが示してるアドレスの参照 p1
        ポインターのアドレスの参照 &p1

ポインターに関係する演算子を下表に示します。


演算子 機能
* ポインターが指しているアドレスの内容を取り出す
& 変数が格納されているアドレスを取り出す

例えば、ポインターの勉強のために、リスト2を実行しましょう。 \fbox{実行結果}

 ----- address hexadecimal -------
&v1=bffff6b4
&v2=bffff6b0
&v3=bffff6ac
&p1=bffff6a8
&p2=bffff6a4
&p3=bffff6a0

 ----- value decimal -------
 v1=-1
 v2=2
 v3=3
*p1=-1
*p2=2
*p3=3

 ----- value hexadecimal -------
 v1=ffffffff
 v2=2
 v3=3
*p1=ffffffff
*p2=2
*p3=3

 ----- pointer hexadecimal -------
p1=bffff6b4
p2=bffff6b0
p3=bffff6ac

 ---------------------------------

   address    data

   bffff6a0   ac
   bffff6a1   f6
   bffff6a2   ff
   bffff6a3   bf
   bffff6a4   b0
   bffff6a5   f6
   bffff6a6   ff
   bffff6a7   bf
   bffff6a8   b4
   bffff6a9   f6
   bffff6aa   ff
   bffff6ab   bf
   bffff6ac   03
   bffff6ad   00
   bffff6ae   00
   bffff6af   00
   bffff6b0   02
   bffff6b1   00
   bffff6b2   00
   bffff6b3   00
   bffff6b4   ff
   bffff6b5   ff
   bffff6b6   ff
   bffff6b7   ff
[練習1]
この結果を考察せよ。



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


no counter