#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,正如我所期望的那样。有人可以解释为什么以及如何纠正它?感谢
答案 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;
}