Sizeof 在函数中不返回相同的结果

时间:2021-05-15 05:35:32

标签: c++ c gcc g++

我一直在尝试在 C++ 中查找数组的长度并希望将其作为函数,但即使数组是引用类型 sizeof 函数也不会返回与运行相同的结果 主要。

下面的代码返回我需要的正确结果。

int main(){
    int arr[] = {3, 71, 223, 696, 21, 453, 231, 422, 22, 32};
    int max = arr[0];
    uint length = sizeof(arr) / sizeof(*arr);
    std::cout << "Length: " << length << std::endl;
    return 0;
}

输出是Length: 10,没问题。

但是如果我尝试使它成为一个函数,这里是示例

uint getLength(int *arr){
    return sizeof(arr) / sizeof(*arr);
}

int main(){ 
    int arr[] = {3, 71, 223, 696, 21, 453, 231, 422, 22, 32};
    std::cout << "Length: " << getLength(arr) << std::endl;
    return 0;
}

它返回2,因此意外的输出是Length: 2

造成这种情况的原因是什么?


我找到了合理的解释。

首先,我不知道 C++ 不允许完全传递数组。

相关,如果参数以整数指针形式给出,sizeof(arr) 的值始终为 8(记住整数指针大小),而 sizeof(*arr)4(记住整数size),因为它指向数组的第一个元素。

0 个答案:

没有答案