C で配列を関数に渡すときの
sizeof() の異常
C では、配列に関して sizeof() 演算子の動作が異なります。 main 関数で使用される場合よりも関数に渡されます。この矛盾は初心者にとって混乱を招く可能性があります。
配列の適切な受け渡し
配列を関数に適切に渡すには、構文:
int length_of_array(int (&arr)[N]);
ここで:
関数内での sizeof() の使用
関数内で sizeof() を使用する場合は、次のようになります。 true:
sizeof(arr) == N * sizeof(int);
説明:
不正な配列の問題
の渡し 提供されたコード スニペットでは、関数 length_of_array() が次のように誤って配列をポインターで渡しています。
int length_of_array(int some_list[]);
この間違った渡し方により、次のような問題が発生します。問題:
を使用した回避策テンプレート
この制限を克服するには、次のようなテンプレートベースのアプローチを使用できます。
template<size_t N> int length_of_array(int (&arr)[N]) { std::cout << N << std::endl; // Will output the correct array size return N; }
キーポイント:
2 つのメソッドの本質的な違いは、配列を参照によって渡すのとポインタによって渡すことにあります。前者は配列のサイズに関する情報を保持しますが、後者は保持しません。
以上がC の関数に配列を渡すときに sizeof() の動作が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。