Sample02

#include <stdio.h>

int main(void)
{
    int x;

    x = 10;
    printf("*(&x)=%d\nx=%d\n", *(&x), x);

    return 0;
}

実行結果

サンプル02の実行結果

Sample02 は、変数 x の値にポインタから間接的にアクセスしています。最初に、代入演算子で変数 x に 10 を代入しています。その後 printf() 関数のパラメータで x 変数へのポインタをアドレス演算子 & で取得し、さらにこの結果に対して間接演算子 * を用いて取得しています。式 *(&x) の結果が、x 変数の値と等しいことが結果から確認できます。

加えて、ポインタから間接的に値を代入することも可能です。値の代入も、同じように間接演算子 * を用いてポインタから変数を参照します。

Sample03

#include <stdio.h>

int main(void)
{
    int x;

    *(&x) = 100;
    printf("x=%d\n", x);

    return 0;
}

実行結果

サンプル03の実行結果

Sample03 は、x 変数のポインタから間接演算子を用いて値を代入しています。printf() 関数で x 変数の値を出力すると、適切に x 変数に整数 100 が代入されていることが確認できます。

もちろん *(&x) という式のように、その場で取得したポインタから間接参照することに意味はありません。この場では & 演算子から取得した変数のアドレスがあれば * 演算子を使ってアドレスから元の変数を参照できることを簡素に証明するために上記のようなサンプルを使いました。& 演算子と * 演算子の働きを混同しないように注意してください。