在被调用函数中调用sizeof运算符时,会发生什么?

-3 c sizeof

    void testSizeof(double array[])
    {
        printf ("%i\n", sizeof(array));
    }
Run Code Online (Sandbox Code Playgroud)

调用此函数时,输出不是数组的长度.

为什么?

那么,关于输出的事实是什么?

NPE*_*NPE 5

它返回double指针的大小,即sizeof(double*).

当一个函数接受一个类型的参数时double[],这与取一个类型的参数完全相同double*.据说该数组会衰减为指针.

有关进一步说明,请参阅什么是数组衰减?C FAQ.

如果函数需要知道数组的大小,则必须明确地传递它.例如:

void testSizeof(double array[10]) {...}
Run Code Online (Sandbox Code Playgroud)

要么

void testSizeof(double array[], size_t array_size) {...}
Run Code Online (Sandbox Code Playgroud)

在第一个例子中,数组也受到指针衰减的影响.但是,由于您已经知道了数组的大小,因此您无需使用sizeof()它来计算它.

不言而喻,第二种方法比第一种方法灵活得多.