在C ++中传递一组int作为参数?

时间:2013-09-14 02:50:12

标签: c++ arrays memory parameters arguments

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

我很新,所以如果这是一个糟糕的问题,请原谅。

3 个答案:

答案 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;
}