为什么长度函数返回2?

时间:2013-07-04 13:12:00

标签: c++ arrays

我编写了一个函数size,它将整数数组作为参数。

int length(int a[])
{

    return  sizeof(a)/sizeof(int);

}

int main()
{
    int a[] = {1,3,5,6,9,4,2,1,0,0};

    int len = sizeof(a)/sizeof(int);

    cout << len;  // This correctly prints 10 .

    len =  size(a);

    cout << len;  // But this print 2 .why ??

    return 0;
}

有人可以解释一下这种行为吗? 感谢。

2 个答案:

答案 0 :(得分:4)

你得到2的原因是因为sizeof(int *)sizeof(int)的两倍,并且数组在传递给函数时会衰减为指针。

有各种方法可以解决这个问题。在C ++中,您可以使用std::vector<int> a = { ... };来解决问题(通过调用a.size()来获取大小,因为sizeof(a)不起作用)。

答案 1 :(得分:0)

因为sizeof(a)返回的指针大小为4个字节或8个字节,具体取决于您的应用程序是32位还是64位。因此,您需要使用单独的变量来维护数组的长度。

或者,更好的是,我建议使用其中一个标准集合类,例如std::vector,因为这会自动保持长度。