ホームページ > バックエンド開発 > C++ > C の配列のアドレスが、その最初の要素へのポインターのアドレスと同じなのはなぜですか?

C の配列のアドレスが、その最初の要素へのポインターのアドレスと同じなのはなぜですか?

DDD
リリース: 2024-11-22 08:08:10
オリジナル
249 人が閲覧しました

Why is the address of an array in C equivalent to the address of a pointer to its first element?

配列アドレスと変換されたポインタの等価性を理解する

C プログラミング言語では、配列を配列に変換するのが一般的です。配列からポインタへの変換を使用して、最初の要素へのポインタを返します。これにより、なぜ配列のアドレスが変換されたポインタのアドレスと同じなのかという疑問が生じます。

この概念を説明するために、次のコードを考えてみましょう。

int t[10];

int *u = t;

cout << t << " " << &t << endl;
cout << u << " " << &u << endl;
ログイン後にコピー

出力このコードは、配列アドレスと変換されたポインタ アドレスが等価であることを示しています。

0045FB88 0045FB88
0045FB88 0045FB7C
ログイン後にコピー

この現象を理解するには、2 つの異なる点を認識する必要があります。記号 t に関連付けられた意味:

  • 配列式: 単独で使用される場合、t は配列式として扱われます。この式は、出力操作を含むほとんどのコンテキストで、配列の最初の要素 (つまり、&t[0]) へのポインターに自動的に変換されます。
  • 配列へのポインター: が前にある場合& 演算子、t は配列自体へのポインターとして扱われます。この操作により、最初の要素だけでなく配列全体のアドレスが得られます。

このコードでは、出力の最初の行に t (配列) のアドレスと &t (配列へのポインタ)。配列はメモリの連続したブロックであるため、それらの開始アドレスは同一です。

出力の 2 行目には、u (最初の要素への変換されたポインタ) のアドレスと &u (変換された要素へのポインタ) のアドレスが表示されます。ポインタ)。繰り返しになりますが、u は本質的に &t[0] と同等であるため、これらのアドレスは同じです。

したがって、配列のアドレスがポインタに変換された配列のアドレスと同じである理由は次のとおりであると結論付けられます。どちらも、配列が占有する連続したメモリ ブロックの開始アドレスを表すためです。配列からポインターへの変換により、配列全体の先頭と同じメモリ位置を持つ配列の最初の要素へのポインターが生成されるため、この等価性が維持されます。

以上がC の配列のアドレスが、その最初の要素へのポインターのアドレスと同じなのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート