2

我编写了一个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;
}

有人可以向我解释这种行为吗?谢谢。

4

2 回答 2

4

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

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

于 2013-07-04T13:14:37.773 回答
0

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

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

于 2013-07-04T13:16:22.340 回答