admin 管理员组文章数量: 1086019
2024年4月21日发(作者:json在线时间格式转换)
一、二维数组
与一维数组一样,多维数组一般也不能整体操作,整体操作需转化成对数组的分量下标变量进
行。
1、二维数组的定义形式为:数组名[下标表达式1][下标表达式2];
例如,定义的a[3][4]数组元素分别
a [0][O]、a [0][1]、a [0][2]、a [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]
左边下标变化最慢,右边下标变化最快,右边下标变化一遍,左边下标才变化一次。
二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一
维数组的每一个成员又是一个一维数组。如以上定义的a数组,则可视a数组由a[0]、a[1]、
a[2]等三个元素组成,而a[0]、a[1]、a[2]等每个元素又分别是由4个整型元素组成的一维
数组。可用a[0][0]、a[0][1]等来引用a[0]中的每个元素,其它依次类推。
说明:
(1)每个下标的取值范围从零(0)开始一直到数组长度减1,下标变量同样相当于基类型变
量。
(2)对于多维数组整体操作的完成需用多重循环,一个下标对应于一重循环控制变量。二维数
组的整体操作用两重循环完成,外重循环对应下标1,内重循环对应下标2。
(3)其它类似于一维数组处理。
(4)二维数组名也是一个地址常量二维数组名同样也是一个存放地址常量的指针,其值为二维
数组中第一个元素的地址。以上a数组,数组名a的值与a[0]的值相同,只是其基类型为具
有4个整型元素的数组类型。即a+0的值与a[0]的值相同,a+1的值与a[1]的值相同,a+2的
值与a[2]的值相同,它们分别表示a数组中第零、第一、第二行的首地址。二维数组名应理
解为一个行指针。
2、二维数组的初始化
二维数组及多维数组的初始化和一维数组类似初始化形式:
数组名[下标1][下标2]={常量l,常量2,…,常量n);
例如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
a[O][O]=1,a[O][1]=2,a[O][2]=3,a[O][3]=4,
a[1][O]=5,a[1][1]=6,a[1][2]=7,a[1][3]=8,
a[2][O]=9,a[2][1]=10,a[2][2]=11,a[2][3]=12
(1)二维数组的初始化可以分行进行。例如,上面的a数组初始化还可以表示为:
int a[3][4]={{1,2,3,4),{5,6,7,8),{9,10,11,12));
而定义4行3列的b数组可以表示为:
int b[4][3]={{1,2,3),{4,5,6},{7,8,9},{10,11,12});
可以只对数组中部分元素初始化。例如:
a[0][0]=1,a[0][1]=2,a[1][0]=5,a[2][0]=9,其它分量初值取默认值,为0。
(2)如果对二维数组中全部元素初始化,则定义数组时第一维的长度可以省略,但第二维的长
度不能省略。例如:
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};
但不能写成
int a[][]={1,2,3,4,5,6,7,8,9,10,11,12);
(3)如果对二维数组按行进行初始化,则定义数组时第一维的长度也可以省略。例如:
int a[][4]={{1,2},{5},{9})
3、下面举个例子来认识二维数组的应用
在程序设计中,有时用一维数组还不能解决问题或解决问题不方便。例如,描述一个班50个
学生成绩,可以用一个一维数组描述,若要描述全校100个班的学生成绩,假定每班都为50
人,则需用100个不同的一维数组来描述。用一维数组来实现会相当麻烦。此时可采用多维数
组解决上述问题:描述某校100个班的学生成绩,将定义为一个二维数组(班级,人数);在多
维数组中,经常使用的是二维数组。
数组名代表数组所占存储空间的首地址。常量分别表示数组相应维的长度,数组长度以及数组
中分量个数分别等于常量1、常量2、…、常量n。
例如:
(1)上述100个班,每班50个学生一门课程的成绩,定义如下二维数组描述:
float cj[100][50];/*第一维对应班级,第二维对应学生*/
(2)1000个学生,30门课程的成绩,定义如下二维数组描述:
float acj[1000][30];/*第一维对应学生,第二维对应课程*/
版权声明:本文标题:二维数组1 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1713679093a646618.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论