6.2.3 二维数组的初始化

与一维数组初始化一样,在定义二维数组的时候就可以顺便给该二维数组元素赋初值,这就叫二维数组的初始化。有如下这些赋初值的方法。

(1)按行给二维数组赋初值:

按行赋值,第一个花括号(大括号)内的数据赋值给第一行元素,第二个花括号内的数据赋值给第二行元素,以此类推,相当于a[0][0]=1,a[0][1]=2,a[0][2]=3,a[0][3]=4,a[1][0]=5,…,a[2][3]=12。

(2)将所有数据放在一个大括号里,例如如下语句,和(1)的效果一样,但是这样初始化看起来不清晰,容易遗漏和造成混乱:

(3)对部分元素赋初值:

每个大括号里的内容代表一行,这里省略了第三行,也就是没给第三行元素赋初值,那么所有没有赋值的元素,都会被系统默认赋成0。可以设置断点调试一下看,如图6.8所示。

图6.8 语句“int a[3][4]={{1},{3,4}};”赋初值的结果

如下代码,对第二行不赋初值,可以设置断点看一下结果:

可以看到,没赋初值的数组元素同样被系统默认赋成0。

(4)若对全部元素赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。例如对于如下语句:

可以简写为:

此时系统会根据初始化的数据总个数来分配存储空间,一共有12个数据,每行有4列,那当然是3行,但是一般很少这样编写代码,都应该明确地写出数组维度的大小。

也可以只对部分元素赋初值,但仍旧省略第一维长度,但应该分行赋初值:

注意,目前所讲解的一维和二维数组都是整型数组,也就是数组元素中保存的都是整型数字,这是因为整型数组在编程时用的比较广泛。接下来,将要讲解字符数组,字符数组在C和C++中用的也非常广泛,同时也最容易用错,请认真学习。