C ++数组大小不同的结果

时间:2012-09-21 16:58:52

标签: c++ arrays size

  

可能重复:
  Sizeof an array in the C programming language?

    #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;
    }

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

2 个答案:

答案 0 :(得分:1)

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

sizeof(a);

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

答案 1 :(得分:0)

要防止数组转换为指针,可以将引用传递给该函数的数组。但它导致函数数组的类型形式参数和实际参数必须重合(包括它们的大小)。所以你需要使用template来使你的函数适用于任何大小的数组:

template <int N>
void foo(const string (&a)[N])
{
    int size_of_a = sizeof(a) /sizeof(a[0]);
    cout << size_of_a; 
}