ポインタに変換された t、&t[0]、および t のアドレスが同じである理由
配列はメモリの連続したブロックです同じデータ型の要素が含まれています。配列を宣言すると、コンパイラはメモリのブロックを割り当て、そのブロック内の各要素へのポインタを作成します。
ケース 1: t および &t[0]
t を単独で (添字なしで) 使用すると、配列からポインターへの変換が行われ、配列の最初の要素へのポインターが生成されます。この動作は、最初の要素のアドレスを明示的に返す &t[0] を使用するのと同じです。したがって、t と &t[0] は同じ値になります。
ケース 2: &t
ただし、& 演算子を t に適用すると、同じ値にはなりません。配列からポインターへの変換をトリガーします。代わりに、&t は t 自体のアドレスを直接取得し、その結果、配列全体へのポインターが生成されます。
メモリ内では、配列の最初の要素と配列の先頭は同じ場所に存在します。したがって、ポインター t、&t[0]、および u (t へのポインター) はすべて同じアドレスを持ちます。
出力の説明:
指定されたコードはこれを示しています動作:
int t[10]; int * u = t; cout << t << " " << &t << endl; cout << u << " " << &u << endl;
出力:
0045FB88 0045FB88 0045FB88 0045FB7C
出力は、t、&t[0]、および u が同じ値 (0045FB88) を持っていることを示し、ポインターとしての等価性を確認します。
以上が`t`、`&t[0]`、および `t` へのポインタが同じアドレスを持つのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。