此问题已经在这里有了答案:
[我只是在弄弄一些代码,然后突然发现通过引用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。
[无论何时尝试将数组传递给任何函数。数组隐式转换为指向数组第一个元素的指针。在上面的代码中,当您传递整数数组时,它将转换为指向数组的整数指针。这就是为什么您得到这样的结果。在数组的情况下,您需要在函数中显式传递大小。所以sizeof工作正常,它正在划分“指向数组的指针”的大小与“一个元素的大小”。
进行这种强制转换的原因是,“您必须知道参数已复制到函数的参数中。但是在数组的情况下。数组可以是可变大小的,它们的大小可能更大。因此,不必复制这么大的数组。这就是语言自动执行此强制转换的原因。“