next up previous contents
Next: 5. ポインタの演算 Up: 12. ポインタ I Previous: 3. 文字列とポインタ

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 と 出力されるのである。



Noriyo Kanayama