C 配列を扱う場合、関数に渡されたときの動作を理解することが重要です。この質問は、関数内と関数外の配列の sizeof() 値の驚くべき違いを明らかにします。
問題:
指定された C プログラムでは、サイズ 3 が宣言されており、そのサイズは sizeof(point)/sizeof(point[0]) を使用して正しく取得されます。ただし、同じ配列が test() 関数に渡されると、sizeof(arr) は誤った値 2 を返します。
理由:
配列がC の関数に渡されると、その最初の要素へのポインターに分解されます。したがって、関数パラメーターの sizeof() は、配列自体ではなくポインターのサイズを測定します。これにより、test() 関数で誤った結果が発生します。
解決策:
この問題に対処するには、配列のサイズを別のパラメータとして渡す必要があります。関数へ:
void test(int arr[], size_t elems) {}
main() 関数では、配列サイズを渡すことができます。使用方法:
test(point, sizeof(point) / sizeof(point[0]));
注:
sizeof(point)/sizeof(point[0]) の計算は動的に割り当てられたものには適用できないことに注意することが重要です。配列。スタックに割り当てられていません。
以上が`sizeof()` が関数内と関数外の C 配列に対して異なる値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。