C 関数の配列パラメーターに対して sizeof() が同じように機能しない理由
C では、配列は に渡されるとポインターに分解されます。関数を使用すると、配列サイズを決定する際の sizeof() の使用の信頼性が低くなります。これを理解するために、次の関数を分析してみましょう。
int length_of_array(int some_list[]) { return sizeof(some_list) / sizeof(*some_list); }
配列パラメータの問題
パラメータ some_list は配列として宣言されていますが、関数のシグネチャは事実上、 int length_of_array(int* some_list) と同等です。これは、配列が関数パラメータ内のポインタに分解されるためです。
sizeof() への影響
このコンテキストで sizeof(some_list) を使用すると、ポインタのサイズが計算され、結果は次のようになります。値は 1。sizeof(*some_list) (整数のサイズ) で割ると、次のようになります。 1.
例
指定された例では、出力に見られるように、配列 num_list に 15 個の要素が含まれているにもかかわらず、関数 length_of_array() は一貫して 1 を返します。 🎜>
This is the output from direct coding in the int main function: 15 This is the length of the array determined by the length_of_array function: 1
テンプレートを使用した解決策関数
関数で配列のサイズを決定するには、テンプレート関数を使用し、配列を参照で渡すことができます。template<size_t N> int length_of_array(int (&arr)[N]) { return N; }
以上がC 関数の「sizeof()」が配列パラメータに対して予期しない結果を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。