我一直在尝试在 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),因为它指向数组的第一个元素。