可能重复:
How to find the sizeof(a pointer pointing to an array)
Sizeof array passed as parameter
我有这段代码:
class total {
public:
void display(int []);
};
void total::display(int *arr)
{
int len = sizeof(arr)/sizeof(int);
cout << len;
}
int main(void)
{
int arr[] = { 10, 0, 0, 4, 20 };
total A;
A.display(arr);
return 0;
}
输出 1 ,而我预计它是数组的长度, 5
但是,如果我在sizeof()
中使用main()
语句,则会显示5。
那么,为什么sizeof()没有在成员函数中显示正确的值?
答案 0 :(得分:3)
sizeof
产生数组的大小,但指针操作数的sizeof
产生指针的大小。指针和数组在C / C ++中并不相同。
答案 1 :(得分:1)
sizeof运算符返回操作数的大小。在您的情况sizeof(arr)
中,操作数的类型为int*
。因此,结果是4或8(取决于平台,也可以是2或1)。在结束时无法知道传递的数组的长度。即使你写了
void total::display(int arr[5])
{
}
这不会改变任何东西,因为当它们被用作方法的参数时,数组被转换为指针。你仍然可以传递任何大小的数组。