12.4 間接参照演算子

ポインタで示されたデータへのアクセスを行う演算子が間接参照演算子である。

        * (アドレス)

の形式でデータが参照される。

例4
        int a=2;
        int *p;
        p = &a;
        printf("address is %u, value is %d\n", p, *p);

上の例では、address is 1249, value is 2 のように出力される。 つまり、上の例では、*pa とは 同じ意味になっていて、p で示されるアドレスのデータを取り出すという 意味になっている。 更に、間接参照演算子は代入にも使える。

例5
        int a=3, b;
        int *p;
        p = &a;
        b = *p;
        printf("%d\n", b);

この例では、まず a のアドレスが p に代入され、次に p の 指しているアドレス(即ち a のアドレス)の中身が取り出され、b に 代入されているので、3 が出力される。

例6
        int a=1;
        int *p;
        p = &a;
        printf("a is %d\n", a);
        *p = 2;
        printf("a is %d\n", a);

上の例 6 では、最初は変数 a に 1 が入っているので、 一番目の printf() では、a is 1 が出力されるのだが、その次の行 で、*p に対して 2 を代入しているのが重要である。今、ポインタ変数 p には整数変数 a のアドレスが入っているので、*pa と全く同じであると考えて良い。即ち、この場合は、a = 2; を 実行しているのと全く同じなのである。従って、プログラムの上では、a への 代入はないにも関らず、二番目の printf() では、a is 2 と 出力されるのである。



最初のページ 戻る 次へ 最後のページ 目次
Hiroyasu Asami