配列引数の関数で sizeof() の動作が異なる場合
C で配列を関数に渡すときは、次のことを理解することが重要ですsizeof() が main 関数で使用した場合と同様に機能しないのはなぜですか。
配列がポインターに減衰する
配列がメソッドを持つ真のオブジェクトである Java のような言語とは異なります。 C では、プロパティは単なるポインターです。配列が引数として関数に渡されると、配列の最初の要素へのポインターに減衰します。
sizeof() on Pointers vs. Arrays
main 関数で、配列に適用される sizeof() は、すべての要素を含む配列の合計サイズをバイト単位で返します。ただし、関数内の配列への減衰ポインタに対して sizeof() が使用されると、ポインタ自体のサイズが返されます。これは通常、整数型 (例: sizeof(int)) のサイズになります。
配列サイズを決定するための回避策
ポインターに減衰した配列のサイズを決定するには、folgende コードを使用できます。
int length_of_array(int* some_list) { // Not applicable here, but see below for when it might be return 0; }
例外: 参照によって渡された配列
配列の減衰ルールには例外が 1 つあります。配列は参照によって渡すこともでき、配列のサイズ情報にアクセスできます。この構文は次のとおりです。
template<size_t N> int length_of_array(int (&arr)[N]) { // Size of the array can be determined via the template parameter N return N; }
この場合、N は渡される配列のサイズを表し、配列の長さを正確に決定するために使用できます。
以上がC 関数の配列引数に対して「sizeof()」の動作が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。