对于二维数组的定义,跟一维数组是差不多的。
我们来看一个例子:
int a[2][3];
这个就是一个整型的二维数组,
第一维有两个元素,第二维有三个元素。
每一维的长度分别用一对方括号括起来。
我们不能写成这种形式:
int a[2,3]
其实我们可以把这个看成一个二行三列的矩阵,第一维表示行,第二位表示列。
如:
1 2 3
4 5 6
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式]
其实我们把a[2]看成一个数组名,那么a[2][3]就是一个一维数组了。
我们在向二维数组中输入元素时,就像上面两行三列中的数字顺序一样进行输入的,
它们分别对应着:
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
虽然我们可以在直观上看到用矩阵表示的二维数组,但在内存的存放中,二维数组的数据是连续存放的,呈线性排列。
就像下面这张图:
对于二维数组的引用,
我们直接就按照行和列来确定元素位置,
在二维数组第第一个括号内的数表示行,第二个括号内的数表示列。
对于出现在表达式中的数组元素,也是可以进行赋值的
比如:
b[1][2]=a[2][3]/2
这个表示的就是数组b的第二行第三列元素等于数组a的第三行第四列元素/2。
就是后者的值/2再赋值给前者。
在引用数组元素时,下标值应在已定义的数组大小的范围内,
超出的就不存在。
比如a[3][4]的行就在0 ~ 2的范围内,列在0~3的范围内
元素a[3][4]不在数组a的范围内,
定义数组和数组的引用是不同的。
对于二维数组的初始化,跟一维数组还是有些区别的。
下面是几种赋值方法:
1.分行给二维数组赋初值:
例如:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
这个赋值方法我们要注意,最外面的{}表示的是整体,
内部的每一个{}表示一行,内部的{}内的是该行的元素。
上面的例子中数的大小也是数的赋值顺序。
要注意各个{}间用逗号隔开,各元素间也用逗号隔开。
2.我们也可以直接将所有元素写在一个花括号内,
如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
系统会自动进行分行。
3.可以对部分元素赋初值。
这个跟一维数组一样,未赋值的元素统一以0保存。
如:
int a[3][4]={{1},{5},{9}};
这个是对每一行的第一列元素赋初值,其余元素值自动设定为0.
4.如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第二维的长度不能省去。
如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
与
int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
等价。
系统会自动根据所输入的元素计算行数,即第一维的数。
在定义时也可以只对部分元素赋初值而省略第1维的长度,但需要分行赋值。
如:
int a[][4]={{1,2,3},{},{9,10}};
本篇内容到此结束。