为什么sizeof函数在这里不起作用,因为应该[重复]

问题描述 投票:-2回答:1

此问题已经在这里有了答案:

[我只是在弄弄一些代码,然后突然发现通过引用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。

c++ arrays reference parameter-passing
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.