22
4.2
多维数组
下列程序段实现对数组 int s[3][5]的动态赋值: 4.2.3 二维数组元素的引用 for(i=0; i<=2; i++) /* 行标i从0开始变化到2*/ 二维数组的元素也称为双下标变量,其表示的形式为: for(j=0; j<=4; j++) /* 列标j从0开始变化到4*/ 数组名 ][ 列下标 ] scanf( “%d”[ , 行下标 &s[i][j]) ; /*二维数组元素如同普通 其中下标应为整型常量或整型表达式,其取值范围从 整型变量操作*/ 0开始,分别到行数 -1和列数-1。 例如: a[3][4] 通过前面的学习,对数组也可以这样理解:单个变量描述 了空间中‚点‛的概念,一维数组是对单个变量的扩展,它描 表示a数组中行标为3,列标为4的元素。 述了空间中‚线‛的概念,而二维数组又对一维数组做了扩展, 如果要引用数组中的全部元素,只要利用循环语句即 描述了空间中‚平面‛的概念。人们可以模仿二维数组的使用 可实现,这是对数组中元素进行操作的基本算法。对于一 方法来实现多维数组等各种数据容器。例如,可用如下方法定 维数组,只需用单重循环就可完成;而对于二维数组则需 义三维数组: int a[2][3][4]; 要使用两重循环来完成,外循环控制行标变化,内循环控 多维数组元素在内存中的排列顺序为:第一维的下标变化 制列标变化。 最慢,最右边的下标变化最快。
20
s[0][3]
s[1][1] s[1][2]
……
4.2
多维数组
4.2.2 二维数组的初始化 二维数组初始化也是在类型说明时给各下标变量赋以初值。 二维数组可按行分段赋值,也可按行连续赋值。 例如对数组int s[3][5]: (1)按行分段赋值可写为: int s[3][5]={{80,75,92,61,65},{71,59,63,70,85},{87,90,76, 77,85}}; (2)按行连续赋值可写为: int s[3][5]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77, 85}; 这两种赋初值的结果是完全相同的。