c++数组长度 函数传参

HS-HDU 2015-10-27 10:35:28
#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的参数不是不会退化为指针的么,求解。。。。。
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiht594 2015-10-27
  • 打赏
  • 举报
回复
void test(int (&a)[10])
{
    cout << sizeof(a)/sizeof(a[0]) << endl;
}
paschen 2015-10-27
  • 打赏
  • 举报
回复
另参看《C++必知必会》中数组形参部分

paschen 2015-10-27
  • 打赏
  • 举报
回复
函数1和函数2其实都是一样的,函数传递都退化成了指针,参数写成char[]仍是当char*看待,这是为了效率才这样的,否则复制数组的开销不小 数组的大小传入函数将丢失了,如果需要数组大小需要自己添加一个参数来作为大小传入函数,或者使用模板函数自动推出大小
lm_whales 2015-10-27
  • 打赏
  • 举报
回复
C语言,数组只能当作指针传递 C++可以传递数组引用

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧