配列アドレスと変換されたポインタの等価性を理解する
C プログラミング言語では、配列を配列に変換するのが一般的です。配列からポインタへの変換を使用して、最初の要素へのポインタを返します。これにより、なぜ配列のアドレスが変換されたポインタのアドレスと同じなのかという疑問が生じます。
この概念を説明するために、次のコードを考えてみましょう。
int t[10]; int *u = t; cout << t << " " << &t << endl; cout << u << " " << &u << endl;
出力このコードは、配列アドレスと変換されたポインタ アドレスが等価であることを示しています。
0045FB88 0045FB88 0045FB88 0045FB7C
この現象を理解するには、2 つの異なる点を認識する必要があります。記号 t に関連付けられた意味:
このコードでは、出力の最初の行に t (配列) のアドレスと &t (配列へのポインタ)。配列はメモリの連続したブロックであるため、それらの開始アドレスは同一です。
出力の 2 行目には、u (最初の要素への変換されたポインタ) のアドレスと &u (変換された要素へのポインタ) のアドレスが表示されます。ポインタ)。繰り返しになりますが、u は本質的に &t[0] と同等であるため、これらのアドレスは同じです。
したがって、配列のアドレスがポインタに変換された配列のアドレスと同じである理由は次のとおりであると結論付けられます。どちらも、配列が占有する連続したメモリ ブロックの開始アドレスを表すためです。配列からポインターへの変換により、配列全体の先頭と同じメモリ位置を持つ配列の最初の要素へのポインターが生成されるため、この等価性が維持されます。
以上がC の配列のアドレスが、その最初の要素へのポインターのアドレスと同じなのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。