配列からポインタへの変換(減衰ともいう)とは何ですか?質問する

配列からポインタへの変換(減衰ともいう)とは何ですか?質問する

配列からポインタへの変換、別名減衰とは何ですか? 配列ポインタと何か関係がありますか?

ベストアンサー1

配列はポインタに「崩壊」すると言われています。 として宣言された C++ 配列はint numbers [5]再ポイントできません。つまり、 と言うことはできませんnumbers = 0x5a5aff23。さらに重要なのは、崩壊という用語は型と次元の損失を意味します。numbersに崩壊すると次元情報 (カウント 5) が失われ、型はもう ではint*なくなります。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 はコンパイル時にわかる必要があります。

おすすめ記事