在成员函数中使用sizeof()

时间:2012-07-01 09:33:07

标签: c++ c arrays sizeof

  

可能重复:
  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()没有在成员函数中显示正确的值?

2 个答案:

答案 0 :(得分:3)

数组操作数的

sizeof产生数组的大小,但指针操作数的sizeof产生指针的大小。指针和数组在C / C ++中并不相同。

答案 1 :(得分:1)

sizeof运算符返回操作数的大小。在您的情况sizeof(arr)中,操作数的类型为int*。因此,结果是4或8(取决于平台,也可以是2或1)。在结束时无法知道传递的数组的长度。即使你写了

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

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