在c语言中, int a[][5] = {1,2,3,4,5,6,7,8} 是合法数组声明,那么

在c语言中,
int a[][5] = {1,2,3,4,5,6,7,8} 是合法数组声明,那么
int b[][][5] = {{1,2,3,4,5,6,7,8,9},{1,2,3,4,5,6}} 与
int b[2][][] = {{1,2,3,4,5,6,7,8,9},{1,2,3,4,5,6}}是否为合法数组声明?

第1个回答  2015-07-23
/data/data/com.n0n3m4.droidc/files/temp.c:2:12: error: declaration of 'b' as multidimensional array must have bounds for all dimensions except the first
int b[][][5] = {{1,2,3,4,5,6,7,8,9},{1,2,3,4,5,6}};
^追答

只能第一维用[]其他维必须给出大小

追问

int a[][1][1][1];

int b[][][1][1];
int c[][][2];//忽略初始化。
比如第一个合法,后两个不合法?

追答

如果无初始化表必须定义每个维度

如果有初始化表必须定义除第一维外每个维度

追问

哦。

字符串数组也是一样吧?

本回答被提问者采纳
第2个回答  2015-07-23
均不合法。。。。
第3个回答  2015-07-23
后面的均不对追问

为什么?

追答

b[][][5]初始化时,[5]至少为{0}

b[2][][]本身就错了,后边的不可以是空的,放前边可以空

追问

意思是多维数组的最后一维必须声明元素个数,其它的纬度可以不用?

追答

判断的关键是,能够分出每个维有几个元素

追问

int a[][1][1][1];

int b[][][1][1];
int c[][][2];//忽略初始化。
比如第一个合法,后两个不合法?

追答

定义的时候其内部一定要是常亮

符号常量也可以,必须有具体值,所以上面都不合法

给数组赋值的时候,只有第一个正确,能知道各维的元素个数

追问

哦,谢谢。

相似回答