0

可能重复:
C 编程语言中数组的大小?

    #include "stdafx.h"
    #include <string>
    #include <iostream>

    using namespace std;

    string a[] = {"some", "text"};

    void test(string a[])
    {
        int size_of_a = sizeof(a) /sizeof(a[0]);
        cout << size_of_a; 
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        test(a); //gives 0
        int size_of_a = sizeof(a) /sizeof(a[0]);
        cout << size_of_a; //gives 2
        return 0;
    }

正如您在评论中看到的那样 test(a) 给出了 0 而不是我所期望的 2 。有人可以解释为什么以及如何纠正它吗?谢谢

4

2 回答 2

1

当您将数组传递给函数时,它会衰减为指向数组第一个元素的指针,因此在您的test(string a[])函数中

sizeof(a);

实际上返回指针的大小而不是数组的大小。

于 2012-09-21T17:04:41.097 回答
0

为了防止数组变为指针,您可以将对数组的引用传递给函数。但这会导致函数形式参数和实际参数的数组类型必须一致(包括它们的大小)。因此,您需要使用template使您的函数与任意大小的数组一起工作:

template <int N>
void foo(const string (&a)[N])
{
    int size_of_a = sizeof(a) /sizeof(a[0]);
    cout << size_of_a; 
}
于 2012-09-21T17:12:03.073 回答