web-dev-qa-db-ja.com

アレイのアドレス

int t[10];

int * u = t;

cout << t << " " << &t << endl;

cout << u << " " << &u << endl;

出力:

0045FB88 0045FB88
0045FB88 0045FB7C

uの出力は意味があります。

t&t[0]は同じ値でなければなりませんが、どうして&tも同じですか? &tは実際にはどういう意味ですか?

34
quuxbazer

tを単独で式で使用すると、配列からポインターへの変換が行われ、これにより配列の最初の要素へのポインターが生成されます。

t&演算子の引数として使用すると、そのような変換は行われません。次に、&t(配列)のアドレスを明示的に取得します。 &tは、全体としての配列へのポインタです。

配列の最初の要素は、配列全体の先頭と同じメモリ位置にあるため、これらの2つのポインタは同じ値を持っています。

33
Mankarse

tの実際のタイプはint[10]なので、&tは配列のアドレスです。

また、int[]は暗黙的にint*に変換されるため、tconvertsは配列の最初の要素のアドレスに変換されます。

4
Abyx