0

可能重复:
如何找到作为参数传递的 sizeof(指向数组的指针)
Sizeof 数组

我有这个代码:

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() 没有在成员函数内显示正确的值?

4

2 回答 2

3

sizeof数组操作数产生数组的大小,而sizeof指针操作数产生指针的大小。指针和数组在 C/C++ 中是不一样的。

于 2012-07-01T09:34:36.753 回答
1

sizeof 运算符返回操作数的大小。在您的情况下sizeof(arr),操作数的类型是int*. 因此,结果是 4 或 8(取决于平台,也可以是 2 或 1)。在函数内部没有办法知道传递数组的长度。即使你写

void total::display(int arr[5])
{
}

这不会改变任何东西,因为数组在用作方法的参数时会转换为指针。您仍然可以传递任何大小的数组。

于 2012-07-01T09:37:57.950 回答