タイトルが間違っています。
*
は「関節演算子」ではなく、「間接演算子」です。
なぜ、「間接演算子」というのか分かっていますか?
int x = 100;
とあったら、変数 x を 100という値で初期化しています。
変数 x に 100 という値を格納しているのです。
int *p = &x; *p = 100;
とあったら、これは、
変数 x に 100 という値を間接的に代入しています。
変数 x に 100 という値を格納しているのです。
変数 x の値を参照したり、変更(別の値を格納)したりするのに、
x という変数名を使うのが直接参照です。
ポインタ変数 p が変数 x のアドレスを持っている時、
*p は変数 x を間接参照しているのです。
だから、*
は「間接演算子」というのです。
このコードを実行したところ、pと*pのアドレスは違いました。
*p は変数 x です。2つの変数 p と x のアドレスが違うのは当然です。
関節演算子をつけたポインタ変数のアドレスは、つけていないときと変わらないと書いてあったので、
そんなことは書かれていません。
「ポインタ変数 p に間接演算子を付けた *p」は、変数 x です。
「ポインタ変数 p に間接演算子を付けた *p のアドレス」は、変数 x のアドレスです。