偶然在编程的时候发现一个问题,可以抽象成如下。
#include <iostream>
using namespace std;
template <class T>
void func(T t[])
{
cout<<"sizeof(t) = "<<sizeof(t)<<endl;
}
void test01()
{
int a[3] = {1, 2, 3};
cout<<"int数组sizeof(a) = "<<sizeof(a)<<endl;
func(a);
}
void test02()
{
char b[3] = {'a', 'f', 's'};
cout<<"char数组sizeof(b) = "<<sizeof(b)<<endl;
func(b);
}
int main(void)
{
test01();
test02();
return 0;
}
运行如下
int数组sizeof(a) = 12
sizeof(t) = 8
char数组sizeof(b) = 3
sizeof(t) = 8--------------------------------
Process exited after 0.06062 seconds with return value 0
请按任意键继续. . .
故发现数组在传入函数前后使用sizeof函数得到的结果不一样。一般传入数组还用sizeof函数是为了求数组长度,但这种方法显然已经出错。至于错误原因,要探求数组与指针的关系,这里把数组传进函数是通过指针进行的,故使用sizeof是得到了一个指针的大小,指针在64位系统占8个字节,所以才会得到输出的结果。
所以如果想得到数组的长度,推荐的做法是在函数接口添一个形参代表数组长度,在函数外把数组长度求出来后传进去。