我在C ++中创建了一个函数来查找数组的长度。我发现参数中传递的数组sizeof
并将其除以sizeof
变量类型。这应该工作,但它总是返回1!我错过了一些明显的东西吗或者这与指针和内存有关吗?这是我的代码:
#include <iostream>
using namespace std;
int lengthOf(int arr[]);
int main() {
int x[] = {1,2,3,0,9,8};
int lenX = lengthOf(x);
cout << lenX;
return 0;
}
int lengthOf(int arr[]) {
int totalSize = sizeof arr;
cout << totalSize << endl;
int elementSize = sizeof(int);
return totalSize/elementSize;
}
输出(应为6而不是1):
4
1
我很新,所以如果这是一个糟糕的问题,请原谅。
答案 0 :(得分:1)
将数组作为参数传递时,它总是衰减为指针。如果要查看数组的大小,则需要通过引用传递数组,例如:
template <int Size>
int lengthOf(int (&array)[Size]) {
return Size;
}
答案 1 :(得分:0)
你应该使用指针。
(sizeof(arr)/ sizeof(* arr))
答案 2 :(得分:0)
即使int arr[]
看起来像是在传递数组,但实际上是在传递一个指针。 int arr[]
在用作函数参数时相当于int* arr
,它来自C。
在C ++中,如果要传递数组,正确的方法是通过引用来完成:
template <int N>
int lengthOf(int (&arr)[N]) {
int totalSize = sizeof arr;
cout << totalSize << endl;
int elementSize = sizeof(int);
return totalSize/elementSize;
}