void testSizeof(double array[])
{
printf ("%i\n", sizeof(array));
}
调用此函数时,输出不是数组的长度。
为什么?
然后,关于输出的事实是什么?
答案 0 :(得分:5)
返回double
指针的大小,即sizeof(double*)
。
当函数采用类型double[]
的参数时,这与采用类型double*
的参数完全相同。该数组被称为衰减成指针。
有关详细说明,请参阅What is array decaying?和C FAQ。
如果函数需要知道数组的大小,则必须显式传递它。例如:
void testSizeof(double array[10]) {...}
或
void testSizeof(double array[], size_t array_size) {...}
在第一个示例中,数组也是subject to pointer decay。但是,由于您已经知道了数组的大小,因此您无需使用sizeof()
来计算它。
不言而喻,第二种方法比第一种方法灵活得多。