c++数组长度 函数传参,该如何处理
c++数组长度 函数传参
#include "stdio.h"
void Count_array_element_ptr(int *p){
printf("%d\n",sizeof(p)/sizeof(p[0]));
return ;
}//函数1
void Count_array_element_array(int array[]){
printf("%d\n",sizeof(array)/sizeof(array[0]));
return ;
}//函数2
int main(int argc, char* argv[])
{
int array[10];
//session 1: 计算出数组的长度
printf("%d\n",sizeof(array)/sizeof(array[0]));
Count_array_element_ptr(array);
Count_array_element_array(array);
return 0;
}
运行结果是10,1,1,为什么第二函数也是输出1啊,不是传递的是数组了么,并不是指针啊,sizeof的参数不是不会退化为指针的么,求解。。。。。
------解决思路----------------------
C语言,数组只能当作指针传递
C++可以传递数组引用
------解决思路----------------------
函数1和函数2其实都是一样的,函数传递都退化成了指针,参数写成char[]仍是当char*看待,这是为了效率才这样的,否则复制数组的开销不小
数组的大小传入函数将丢失了,如果需要数组大小需要自己添加一个参数来作为大小传入函数,或者使用模板函数自动推出大小
------解决思路----------------------
另参看《C++必知必会》中数组形参部分

------解决思路----------------------
#include "stdio.h"
void Count_array_element_ptr(int *p){
printf("%d\n",sizeof(p)/sizeof(p[0]));
return ;
}//函数1
void Count_array_element_array(int array[]){
printf("%d\n",sizeof(array)/sizeof(array[0]));
return ;
}//函数2
int main(int argc, char* argv[])
{
int array[10];
//session 1: 计算出数组的长度
printf("%d\n",sizeof(array)/sizeof(array[0]));
Count_array_element_ptr(array);
Count_array_element_array(array);
return 0;
}
运行结果是10,1,1,为什么第二函数也是输出1啊,不是传递的是数组了么,并不是指针啊,sizeof的参数不是不会退化为指针的么,求解。。。。。
------解决思路----------------------
C语言,数组只能当作指针传递
C++可以传递数组引用
------解决思路----------------------
函数1和函数2其实都是一样的,函数传递都退化成了指针,参数写成char[]仍是当char*看待,这是为了效率才这样的,否则复制数组的开销不小
数组的大小传入函数将丢失了,如果需要数组大小需要自己添加一个参数来作为大小传入函数,或者使用模板函数自动推出大小
------解决思路----------------------
另参看《C++必知必会》中数组形参部分
------解决思路----------------------
void test(int (&a)[10])
{
cout << sizeof(a)/sizeof(a[0]) << endl;
}