还是不清楚,f(int daytab[2][13]){...}为什么可以写成f(int daytab[][13]){...}

huhaha7171 2006-11-25 11:16:41
原理前2贴大家都说了, 数组在传递后, 数组会退化为指针, 数组长度信息丢失 。对于多维数组, 丢失第一维长度,高维的长度必须给出。

以下例子中函数f(){}的作用是打印数组第30个元素的值,如果没有就报错。

main()
{
int dt[2][13]={a,b,c,...z};
f(dt);
}

//比如函数的作用就是打印第30个元素的值
f(int daytab[][13])
{
/*这里应该怎么写判断数组至少有30个元素?函数没有得到数组的一维大小,怎么计算?所以我觉得函数至少还应该有另外一个参数,即数组的一维大小。*/

}
...全文
281 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj860603 2006-11-26
  • 打赏
  • 举报
回复
如果你一定要问为什么数组作为参数传递会退化为指针的话,那么没什么人可以真正说清楚了。
lj860603 2006-11-26
  • 打赏
  • 举报
回复
上次不是说得很明白了吗?!

函数调用:f(dt); //数组dt高维退化为指针,所以它根本不需要写第一维的长度,因为这个时候
写上高维的长度已经没有意义了!
f(int daytab[][13])就相当于f(int (*daytab)[13])
causeof 2006-11-26
  • 打赏
  • 举报
回复
f(int daytab[][13])
{
//len 即为daytab 的元素个数
int len=strlen((char *)daytab)/sizeof(int));
}
huhaha7171 2006-11-26
  • 打赏
  • 举报
回复
f(int daytab[][13])
{
//len 即为daytab 的元素个数
int len=strlen((char *)daytab)/sizeof(int));
}

---这就是我要问的,谢谢各位,结贴!
huhaha7171 2006-11-25
  • 打赏
  • 举报
回复
所以我就说f(int daytab[2][13]){...}不可以写成f(int daytab[][13]){...}
fflush 2006-11-25
  • 打赏
  • 举报
回复
/*这里应该怎么写判断数组至少有30个元素?函数没有得到数组的一维大小,怎么计算?所以我觉得函数至少还应该有另外一个参数,即数组的一维大小。*/

-------------------------------------------

没错,所以一般都这么写f (int array[][13], int size);

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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