我编写了一个函数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;
}
有人可以解释一下这种行为吗? 感谢。
答案 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
,因为这会自动保持长度。