int t[10];
int * u = t;
cout << t << " " << &t << endl;
cout << u << " " << &u << endl;
出力:
0045FB88 0045FB88
0045FB88 0045FB7C
u
の出力は意味があります。
t
と&t[0]
は同じ値でなければなりませんが、どうして&t
も同じですか? &tは実際にはどういう意味ですか?
t
を単独で式で使用すると、配列からポインターへの変換が行われ、これにより配列の最初の要素へのポインターが生成されます。
t
を&
演算子の引数として使用すると、そのような変換は行われません。次に、&
はt
(配列)のアドレスを明示的に取得します。 &t
は、全体としての配列へのポインタです。
配列の最初の要素は、配列全体の先頭と同じメモリ位置にあるため、これらの2つのポインタは同じ値を持っています。
t
の実際のタイプはint[10]
なので、&t
は配列のアドレスです。
また、int[]
は暗黙的にint*
に変換されるため、t
convertsは配列の最初の要素のアドレスに変換されます。