41310

[code]

    int number = 10
    int *var = &number;
    cout << *var << endl;
    
[/code]

上記コードにおいて、numberのアドレスが出力されると思っておりましたが、  
10が出力されます。

一方、

[code]

    int number = 10
    int *var = &number;
    cout << var << endl;
    
[/code]

上記コードでは、10が出力されると思っておりましたが、numberのアドレスが出力されます。  
なぜこのようになるのかご教示頂けますと幸いです。


CC BY-SA 3.0
2018-01-29T21:39:30.433
41305
2018-01-30T01:25:41.763
2018-01-30T01:15:27.620
19110
26303
question
c++
C++のアドレスとポインタについて


なぜ・・・って「仕様です」

宣言 `int *var;` の読み方ですが、「宣言以外の場所、すなわち、変数を使う場所で `*var` と書いたら `int` になります」。だから
`var` とだけ書いたら `int` ではなくてポインタです。理屈通りの挙動をちゃんと示しているでしょ。


CC BY-SA 3.0
2018-01-29T21:45:29.087
41306
2018-01-29T23:28:06.320
2018-01-29T23:28:06.320
8589
8589
41305
answer


今回のプログラムにおいて、ポインタ変数の名前は `*var` ではなく `var` であることに注意してください。

[code]

    int number = 10
    int *var = &number;
    
[/code]

ここまで書いた時点で、それぞれの変数はこういうことになっています。

  * `number`： `int` 型の変数で、値は `10`。
  * `var`： `int *` 型の変数で、値は `number` のアドレス。つまり、「`int` 型の変数 `number`」へのポインタ。

ここで、今回のプログラムに登場する `*` には2種類あることを注意しておきます。1つは型の名前に登場し、ポインタを表す
`*`。そしてもう1つは、単項演算子としての `*` です。単項演算子 `*` は、「そのアドレスにある値」を求めるために使います。したがって、

  * `var` を評価すると `number` のアドレス
  * `*var` を評価すると `number` の値

が得られることになります。


CC BY-SA 3.0
2018-01-30T01:25:41.763
41310
2018-01-30T01:25:41.763
19110
41305
answer