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

时间:2013-03-04 08:00:29

标签: c sizeof

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

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

为什么?

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

1 个答案:

答案 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()来计算它。

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

相关问题