0

我在 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

我还很新,所以如果这是一个不好的问题,请原谅。

4

3 回答 3

1

当传递一个数组作为参数时,它总是衰减为一个指针。如果要查看数组的大小,需要通过引用传递数组,例如:

template <int Size>
int lengthOf(int (&array)[Size]) {
    return Size;
}
于 2013-09-14T02:55:37.817 回答
0

您应该使用指针。

(大小(arr)/大小(*arr))

于 2013-09-14T02:53:54.833 回答
0

尽管int arr[]看起来您正在传递一个数组,但实际上您正在传递一个指针。int arr[]相当于int* arr用作函数参数时,this来自C。

在 C++ 中,如果你想传递一个数组,正确的方法是通过引用来完成:

template <int N>
int lengthOf(int (&arr)[N]) {
     int totalSize = sizeof arr;
     cout << totalSize << endl;
     int elementSize = sizeof(int);

     return totalSize/elementSize;
}
于 2013-09-14T02:55:19.090 回答