二维数组定义的一般形式为:
类型说明符 数组名[ 常量表达式][ 常量表达式];
比如:
int a[3][4];
表示定义有3行4列共计12个元素的3×4数组。12个元素命名为[0][0],[0]的[1],一个[0][2],一个[0][3];A [1][0], A [1][1], A [1][2], A [1][3];A [2][0], A [2][1], A [2][2], A[2][3]。
与一维数组一样,行序号和列序号的下标从0开始。元素A [I][j]表示第I +1行和第j +1列中的元素。int a[m][n]最大范围内的元素是一个[m-1][n-1]。因此,当引用数组元素时,你应该注意下标值应该在定义的数组大小之内。
此外,与一维数组一样,定义数组时使用的数组名[常量表达式][常量表达式]与引用数组元素时使用的数组名[下标][下标]之间也有区别。第一种方法是定义数组、数组的维数以及每个维的大小。后者只是一个元素的索引,就像一个坐标,对应于一个特定的元素。在C语言中,二维数组就是这样定义的,可以将二维数组看作是一种特殊的一维数组,即其元素为一维数组。例如,“int a[3][4];”你可以把它想象成有三个元素,每个元素都是长度为4的一维数组。[0]、[2]和[3]分别是三个一维数组的名称。让我们来看看情况是否如此:
# includeint main(void) { int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; printf("%dn", sizeof(a[0])); return 0; }
的输出是:
16
您可以看到[0]确实是第一个一维数组的名称,等等。
二维数组的元素顺序是按行存储的,即第一行的元素按顺序存储在内存中,第二行的元素按顺序存储。
二维数组的初始化可以用下面的方法对二维数组进行初始化
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};
效果与第 1 种是一样的。但第1种方法更好,一行对一行,界限清楚。第 2 种方法如果数据多,写成一大片,容易遗漏,也不易检查。
3) 也可以只对部分元素赋初值。比如:
int a[3][4] = {{1, 2}, {5}, {9}};
它的作用是对第一行的前两个元素赋值、第二行和第三行的第一个元素赋值。其余元素自动为 0。初始化后数组各元素为:
4) 如果在定义数组时就对全部元素赋初值,即完全初始化,则第一维的长度可以不指定,但第二维的长度不能省。比如:
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};
系统会根据数据总数和第二维的长度算出第一维的长度。但这种省略的写法几乎不用,因为可读性差。
5) int a[3][4]={0};
二维数组“清零”,里面每一个元素都是零。
二维数组有行和列,那么如何输出里面的元素呢?在讲述一维数组的时候说过,“数组的元素只能一个一个输出”,二维数组也不例外。在一维数组中是用一个 for 循环进行输出,而二维数组元素的输出要使用两个 for 循环嵌套。
# includeint main(void) { int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; int i; //行循环变量 int j; //列循环变量 for (i=0; i<3; ++i) { for (j=0; j<4; ++j) { printf("%-2dx20", a[i][j]); } printf("n"); } return 0; }
输出结果是:
1 2 3 4
5 6 7 8
9 10 11 12
提示:“printf("%-2dx20",a[i][j]);”中的“%-2d”,其中“-”表示左对齐,如果不写“-”则默认表示右对齐;“2”表示这个元素输出时占两个空格的空间,所以连同后面的 x20 则每个元素输出时都占三个空格的空间。
想要系统学习JAVA推荐JAVA300集
Java300集零基础适合初学者视频教程https://www.bilibili.com/video/BV1oy4y1H7R6?spm_id_from=333.999.0.0



