1. ホーム
  2. c++

[解決済み] 配列からポインタへの減衰とは何ですか?

2022-03-23 08:49:10

質問

配列からポインタへの減衰とは何ですか?配列ポインタと何か関係があるのでしょうか?

どのように解決するのですか?

配列はポインタに分解されると言われています。 C++で宣言された配列は int numbers [5] は再点検できない、つまり、次のように言うことはできない。 numbers = 0x5a5aff23 . より重要なのは、崩壊という言葉が、種類と次元の喪失を意味することである。 numbers に崩壊する。 int* は、次元情報を失うことで(カウント5)、型が int [5] となります。ここで 減衰が起きない場合 .

配列の最初の要素へのポインタがパラメータにコピーされます (その型も、配列要素の型へのポインタであるべきです)。これは、配列が減衰する性質を持っているためです。 sizeof は、本質的にポインタになるため、もはや完全な配列のサイズを与えるものではありません。 このため、参照渡しやポインタ渡しが好まれるのです(他の理由もありますが)。

配列を渡す3つの方法 1 :

void by_value(const T* array)   // const T array[] means the same
void by_pointer(const T (*array)[U])
void by_reference(const T (&array)[U])

最後の2つは、適切な sizeof 一方、最初のものは、配列の引数が減衰してパラメータに割り当てられたため、情報を取得できません。

1 定数Uはコンパイル時に知るべきものである。