c语言数组赋初值的省略问题

当数组元素的初值全部列于初始列表中,可以省略对数组一维长度的说明。
如short matrix[2][3]={1,2,3,4,5,6}可以写为
short matrix[][3]={1,2,3,4,5,6}。但第二维的长度说明为什么不能省略呢?我认为写成short matrix[2][]={1,2,3,4,5,6}也可以啊!也能推出具体的行列数啊!

第1个回答  推荐于2018-04-13
二维数组映射到一维的存储空间的顺序有行优先和列优先顺序两种。大多数语言如PASCAL BASIC C C++等都是按行优先的顺序存储的,像FORTRAN是按列存优先储的。比如a[m][n]:
按行优先存储:a[0][0]a[0][1]…a[0][n-1]a[1][0]a[1][1]…a[1][n-1]…a[m-1][0]a[m-1][1]…a[m-1][n-1]
这样给定列数了(等于给定每行有多少元素)就可以推出有多少行,也就可以确定存储地址。反之,只给出列数,编译器是没有办法得出行数的,因为C关于二维数组的存储是按行优先的。
还有,如果只给出行数的话,根本没有办法确定每行有多少个。比如说怎么判断是不是matrix[2][]={1,2,3,4,5,6,0,0,0,0}即数组含有缺省值呢?完全可以理解成{{1,2,3,4},{5,6,0,0}}或者{{1,2,3,4,5},{6,,0,0,0,0}}这样就有二义性了。
相信你已经理解了,不理解的话请留言给我。
如果把分给我我会很高兴的,(*^__^*) 嘻嘻……本回答被提问者和网友采纳
相似回答