-3
    void testSizeof(double array[])
    {
        printf ("%i\n", sizeof(array));
    }

この関数を呼び出すとき、出力は配列の長さではありません。

なんで?

それでは、出力についての事実は何ですか?

4

1 に答える 1

5

doubleポインタのサイズ、つまりを返しますsizeof(double*)

関数が型の引数を取る場合double[]、これは型の引数を取るのとまったく同じdouble*です。配列はポインタに崩壊すると言われています。

詳細については、「アレイの減衰とは」を参照してください。およびCのFAQ

関数が配列のサイズを知る必要がある場合は、明示的に渡す必要があります。例えば:

void testSizeof(double array[10]) {...}

また

void testSizeof(double array[], size_t array_size) {...}

最初の例では、配列もポインターの減衰の影響を受けます。ただし、配列のサイズはすでにわかっているので、それを把握するために使用する必要はありませんsizeof()

言うまでもなく、2番目のアプローチは最初のアプローチよりもはるかに柔軟です。

于 2013-03-04T08:01:07.213 に答える