怎么定义初始化并使用一维数组?sizeof计算数组中元素的个数以及字符数组做了介绍,这一节对二维数组做简要讲解。
注意:二维数组与一维数组类似,所以可以按照前面分析一维数组的方法分析一维数组。
(1)二维数组的定义数组元素类型 数组名[数组行数][数组列数],数组行数*数组列数的结果表示这个数组中所具有的数据元素。第一个中括号[]中的数字表示数组的行数,第二个中括号[]中的数字表示数组的列数。
比如int a[2][2];其中第一个中括号中的2表示定义一个有2个一维数组a[0] a[1],也表示是第一维;第二个中括号中的2表示每一个数组有2个元素分别为a[0][0]、a[0][1]、a[1][0]、a[1][1],也表示是第二维。也就说如果要访问表示第二维第一个元素的话可以用a[1][1]
其中[ ][]是二维数组的标志,我们通常是通过下表引用来访问数组中的每个元素(也可以通过指针来访问,本质一样后续讲解如何通过指针来访问数组中的元素)。
数组名的值是个常量,也就是数组中第一个元素的地址。注意这个值是指针常量,不是指针变量,因此我们不可以对这个数组名进行赋值操作。不过在计算数组中元素的个数和&取地址运算符(&既可以作为位操作运算符中的位与元素也可以当做去地址运算符,具体情况具体对待)操作时,并不把数组名当做一个指针常量来表示。
(2)二维数组初始化及使用数组作为一个整体进行定义。是通过在一对花括号{}中输入相应的值,每个值用逗号隔开,比如1)int a[2][2];a[0][0]=1; a[0][1]=2; a[1][0]=3;a[1][1]=4;
2)int a[2][2] ={1,2,3,4}; 或者int a[2][2] ={{1,2},{3,4}; //可以按列单独括起来,简单明了
3) int a[2][2] = {1,2,3};//部分元素初始化
第一种:先定义后初始化,其实这里的初始化就是赋值(包括对部分元素或者全部元素进行赋值)
第二种:在定义的时候直接进行初始化(包括对部分元素或者全部元素进行初始化)
如果对全部元素赋值,则在初始化时没有给出数组行数但是给出数组列数的个数,则编译器会根据所初始化的元素的个数自动计算数组元素的个数。如果只给出行数的个数没有给出列数的个数或者行数和列数的个数都未给出,则会出错。比如int a[][2] = {{1,2}, {3,4}};正确,int a[2][] = {{1,2}, {3,4}};和 int a[][] = {1,2,3,4};错误
因此最好在定义二维数组时就进行初始化,因为定义并初始化后数组中元素的值确定了,即使后续忘记进行相应的赋值操作,数组中元素的值也不会是随机的。但是使用的时候不能作为整体使用,使用时必须拆开使用数组中的各个元素。访问数组时要特别注意下标(包含数组行数和数组列数),下标是从0开始的,如果下标超出了n-1,会产生越界访问,会出现相应的错误。因此我们在对二维数组操作时一定不要越界访问。
(3)有了一维数组,为什么还要二维数组?从前面可以看到其实二维数组和一维数组很类似,也是按顺序在存储空间中进行存储。不过在一些场景中还是用二维数组比一维数组方便。比如统计各个班的成绩,用一维表示班级个数,二维表示每一个班的人数。int a[5][60],表示有5个班级,每个班级人数为60人。
(4)还有多维数组(大于二维)吗?还有三维数组以及四维数组,比如常见的三维数组表示立体空间(长、宽和高),不过我们常见所使用的就是一维数组和二维数组。这些在开发中已足够我们使用。
关于二维数组与指针之间的关系放到指针部分讲解。
以上就是所总结的二维数组的简单用法,这些都是必须要掌握的,上机实战,理解才是王道。
喜欢的话给个点赞