求教各位大神
假如我定义了一个int a[10];
然后输出sizeof(a),就会输出40,这也是我想要的;
但是如果我把这个数组当作参数传递到一个函数里后,在函数里用sizeof(a),答案就是4。
为什么会这样?以及有何方法改进?
谢谢~
你传入的是一个指针吧。在a前面加入&或*试试。
因为此时函数里的a不是a数组,而是a数组的首地址,所以sizeof(a)=4;
可以使用模板,利用编译器自动计算数组长度:
template
int funtestarray(T (&a)[size])
{
return size;
}
直接用数组好像不太好计算,但是可以使用STL中的Vector来替换你的数组,这样就能计算了。
void fun(int *p,int nCount)
{
}
int main()
{
int nArr[] = {2,3,4,5};
fun(nArr,sizeof(nArr)/sizeof(int));
return 0;
}
数组当做参数传递会退化成指针,无法通过sizeof获取数组的长度。如果要真想传长度需要增加个参数传过去。