以下能对二维数组a进行正确初始化的选项是( )。
A. int a[2][ ]={ {1,0,1},{5,2,3};
B. int a[ ][3]={ {1,2,3},{4,5,6};
C. int a[2][4]={ {1,2,3},{4,5},{6} };
D. int a[ ][3]={ {1,0,1},{ },{1,1} };
正确答案:B
请问D错在哪里?
谢谢谢谢,我大概明白了,但是书上有一个和这个类似的,是打印错误嘛@_@
你说书本那个?你拿个编译器试试就知道了,绝对是错的。我们简化他,你试试int a[5]={};就这一句就行了,看看编译器能不能给你通过。
追问我知道B对,A、B我都少敲了一个}
追答其实我们先认定对于一个数组a[n]={}这样的写法是非法的,a[n]={0]或者a[n];是合法的。对于二维数组(假设是int a[5][5]),我们既可以把他当成一位数组int a[5*5},也可以把他当成5个一位数组:
int (a[0]) [5];
int (a[1]) [5];
.......
int (a[4]) [5];
,如果把他当成a[5*5]的话,我们可以这样初始化int a[5][5]={1},那么除了a[0][0]是1,其他都是默认置0,我们也可以把他当成一个大数组,这个数组里有5个小数组(见上),那么就必须对5个数组都初始化:int a[5][5]={{1,2,3,4,5},{0},{1,2,3},{1}},那么这等同于,对于第一个小数组,初始化为
int a1[5]={1,2,3,4,5},int a2[5]={0},int a3[5]={1},int a4;注意,a4我们没写就等于缺省的初始化了。