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

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

为什么?

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

4

1 回答 1

5

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

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

如需进一步解释,请参阅什么是数组衰减?C 常见问题解答

如果函数需要知道数组的大小,则必须显式传递它。例如:

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

或者

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

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

不用说,第二种方法比第一种方法灵活得多。

于 2013-03-04T08:01:07.213 回答