免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1734 | 回复: 4
打印 上一主题 下一主题

关于数组的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-26 16:36 |只看该作者 |倒序浏览
数组作为参数传递给函数时,实际上只是把数组的地址传给函数。
在函数原型中,对于一维数组,数组参数的书写形式无需在方括号中写明数组的大小,例如:int sum(int[],int)
对于二维数组作为参数传递给函数时,实际上传的也是内存地址,
我想问的问题是:为什么在函数原型中,声明数组参数的形式只能省略左边的方括号?例如:int sum(int[][4],int,int)
为什么不能写成int sum(int[][],int,int)?

论坛徽章:
0
2 [报告]
发表于 2003-02-26 18:29 |只看该作者

关于数组的问题!

省略头维,编译器还可以认识,后面的再省略编译器就不认识了。例子中是告诉编译器传进去的是个是个指针类型,具体指向INT[4]类型的,如果4也省略了,编译器就不知道该什么什么类型的了。

论坛徽章:
0
3 [报告]
发表于 2003-02-27 09:46 |只看该作者

关于数组的问题!

因为如果没有最后的数字
那么对a[2][1]
编译器不知道应该取哪个元素

对a[2][10]数组是取第12 个元素
对a[2][5] 数组是取第7 个元素

论坛徽章:
0
4 [报告]
发表于 2003-02-27 09:58 |只看该作者

关于数组的问题!

agree
二维数组在内存中是顺序存储的
简单说
如果写成int a[][4]
如果你要取a[2][4]
那么地址就是a + 2*4 + 2
如果是写成int a[][]
那么这个算式就成了a + 2*? +2
有一个乘数编译器无法获知,当然也就计算不出到底该取哪个地址了。

论坛徽章:
0
5 [报告]
发表于 2003-02-28 22:09 |只看该作者

关于数组的问题!

就是编译器这么要求的,编译器其实也是个程序,不能要求他那么聪明的,(已经够聪明的了吧?)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP