二维数组定义
二维数组可以理解为数学中的矩阵的一个类似概念。二维数组定义的一般形式为:
类型说明符 数组名[常量表达式1][常量表达式2]
在上面的定义中,常量表达式1为二维数组的行,常量表达式2为二维数组的列。一个具体的二维数组如下:
int a[5][10];
上面就定义了一个5行10列的整型的二维数组,共有5*10个元素。C语言中定义的二维数组实际上是一个一维数组,这个一维数组的每一个成员又是一个一维数组。如以上定义的a数组,则可视a数组由a[0]、a[1]、a[2]、a[3]、a[4]五个元素组成,而a[0]、a[1]、a[2]…a[4]等每个元素又分别是由10个整型元素组成的一维数组。可用a[0][0]、a[0][1]等来引用a[0]中的每个元素,其它依次类推。
a[0][0] a[0][1] a[0][2] a[0][3]…a[0][9]
a[1][0] a[1][1] a[1][2] a[1][3]…a[1][9]
a[2][0] a[2][1] a[2][2] a[2][3]...a[2][9]
...
a[4][0] a[4][1] a[4][2] a[4][3]...a[4][9]
二维数组在概念上是二维的,即是说其下标在行和列两个方向增减。但是,存放二维数组的内存却是连续编址的,也就是按一维线性排列的。在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中的元素也是依次存放。而每个元素的长度取决于数组的类型。比如如果定义的是整数类型的数组,那么每个元素的长度即为sizeof(int),一般为4个字节。比如a[5][10]的元素在内存中存放的情形为:
a[0][0] a[0][1] a[0][2] a[0][3]…a[0][9] a[1][0] a[1][1] a[1][2] a[1][3]…a[1][9] a[2][0]a[2][1]a[2][2] a[2][3]...a[2][9]...a[4][0] a[4][1] a[4][2] a[4][3]...a[4][9]