* (アドレス) |
の形式でデータが参照される。
例4 int a=2; int *p; p = &a; printf("address is %u, value is %d\n", p, *p); |
上の例では、address is 1249, value is 2 のように出力される。
つまり、上の例では、*p
と a
とは
同じ意味になっていて、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
のアドレスが入っているので、*p
は
a
と全く同じであると考えて良い。即ち、この場合は、a = 2;
を
実行しているのと全く同じなのである。従って、プログラムの上では、a
への
代入はないにも関らず、二番目の printf()
では、a is 2 と
出力されるのである。