为什么sizeof函数在这里无法正常运行

时间:2019-10-28 09:53:46

标签: c++ arrays reference parameter-passing

我只是在弄弄一些代码,然后突然发现通过引用sizeof(arr)/ sizeof(arr [0])传递数组后,我得到的输出比我预期的要多。如果我只是传递了引用,则len = 1可能是合理的,因为sizeof(arr [0])/ sizeof(arr [0])。这个我错过的概念有什么问题?

#include<iostream>
using namespace std;

void display(int *arr)
{
    int len=sizeof(arr)/sizeof(arr[0]);
    cout<<len<<"\n";
    for(int i=0;i<50;++i)
    {
        cout<<arr[i];
    }
    cout<<"\n";
}

int main()
{
    int arr[50]={0};
    for(int i=0;i<50;++i)
    {
        arr[i]=i;
    }
    display(arr);
    return 0;
}

为什么lenth的输出不应该是50,为什么为什么只有2而不是50?

1 个答案:

答案 0 :(得分:0)

每当您尝试将数组传递给任何函数时。数组隐式转换为指向数组第一个元素的指针。在上面的代码中,当您传递整数数组时,它将转换为 指向数组的整数指针。 这就是为什么您得到这样的结果。在数组的情况下,您需要在函数中显式传递大小。所以sizeof工作正常,它正在划分 “指向数组的指针”的大小和“一个元素的大小”。

这种强制转换的原因是“您必须知道参数已复制到函数的参数中。但是在数组的情况下。数组可以是可变大小的,它们的大小可能更大。因此,不必复制这么大的数组这就是语言自动执行此强制转换的原因。“