首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

【请教】多维数组作函数参数时,形参从第二维开始都必须指定大小。为什么

2013-01-20 
【请问】多维数组作函数参数时,形参从第二维开始都必须指定大小。为什么?多维数组作函数参数时,形参从第二维

【请问】多维数组作函数参数时,形参从第二维开始都必须指定大小。为什么?
多维数组作函数参数时,形参从第二维开始都必须指定大小。

语法为什么要这么规定?数组传参不就是一个指针吗?编译器为什么要让被调函数得到维的大小?

PS:分数不过了,看来就会发不了贴了。。。。。
[解决办法]
数组在作为函数参数传递时,等价于数组首元素指针
多维数组,可以看作元素是数组的数组,二维数组可以看作一个一维数组,这个一维数组的每个元素都是一个一维数组
因此,二维数组在作为函数参数传递时,等价于指向它里面的第一个元素——也就是第一个一维数组——的指针,也就是数组指针
而数组指针的类型由数组元素的类型和数组长度决定,“指向长度为3的int数组的数组指针”跟“指向长度为5的int数组的数组指针”,两个指针的区别,就如同int*和double*一样泾渭分明

所以,传递多维数组时,必须给定第二维以后所有维的长度,否则编译器无法确定指向它首元素指针的类型,更不可能对这个指针进行任何需要确定它指向元素类型大小的加减运算——也许你不需要对指针进行加减,但编译器需要
[解决办法]
楼上都已答出,编译器原理限制。 
自己可以想想 假设 char a[3][4] ,我要取 a[2][1]; 
假设a的地址是 1000 ,那么a[2][1] = 1000+2*4+1 ; 如果你传参不告诉维数,那么你怎么寻址?

热点排行