欢迎来到天天文库
浏览记录
ID:50043733
大小:209.00 KB
页数:26页
时间:2020-03-08
《C语言程序设计 教学课件 作者 许薇 武青海 第八章(2).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八章数组信息工程学院8.5二维数组的定义和二维数组元素的引用8.5.1二维数组的定义二维数组常用来表示一个矩阵。二维数组的定义形式为数据类型符数组名称[整型常量表达式1][整型常量表达式2]例如:intTwoD[2][3];定义了一个2*3(2行3列)的数组,共6个数组元素,数组名称为TwoD,数组元素的类型为int。数据类型符、数组名称和整型常量表达式的用法和一维数组相同。提示:错误的定义二维数组:floata[3,4];/*试图定义一个3行4列的二维数组。语法错误*/应该定义为floata[3][4];。8.5.2二维数组的初始化在定义二维数组时,可以对数组元素赋初值,具体形式如下。(1
2、)分行对数组元素赋初值。例如:inta[2][4]={{1,2,3,4},{5,6,7,8}};初始化的结果用二维表格表示如下:a[0][0]:1a[0][1]:2a[0][2]:3a[0][3]:4a[1][0]:5a[1][1]:6a[1][2]:7a[1][3]:8其中单元格中冒号前表示对应的数组元素,冒号后的值表示初始化后的值。按照数组的内存映像顺序为数组元素赋初值,未指定的单元赋0。例如:inta[2][4]={1,2,3,4};初始化的结果用二维表格表示如下:a[0][0]:1a[0][1]:2a[0][2]:3a[0][3]:4a[1][0]:0a[1][1]:0a[1][2]:
3、0a[1][3]:0(2)初始化时只为每一行提供有限数量的初值。例如:inta[2][4]={{1,2},{3,4}};初始化的结果用二维表格表示如下:a[0][0]:1a[0][1]:2a[0][2]:0a[0][3]:0a[1][0]:3a[1][1]:4a[1][2]:0a[1][3]:0(3)如果提供全部的初值数据,则定义数组时可以不指定第1维的长度。例如:inta[][4]={1,2,3,4,5,6,7,8};系统会根据初值数据的个数和第2维长度自动计算a的第1维长度。但是,不能同时省略第2维的长度,下面的初始化代码会导致编译出错:inta[][]={1,2,3,4,5,6,7,8}
4、;8.5.3二维数组元素的引用二维数组的引用形式为数组名称[下标1][下标2]如果定义了一个m*n的二维数组,那么下标1的范围是0到m−1,下标2的范围是0到n−1。例如:inta[2][3];定义了一个2行3列的数组,那么它的6个数组元素为a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2]这6个数组元素相当于6个int型的变量,可以直接对它们进行操作:a[0][0]=1;a[0][1]=a[0][0]*2;8.6二维数组和指针8.6.1二维数组和数组元素的地址设有整型二维数组a[3][4]如下:01234567891011设数组a的首地址为1 00
5、0。在前面曾经介绍过,C语言允许把一个二维数组分解为多个一维数组来处理,因此,数组a可分解为3个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有4个元素,如a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]4个元素。数组及数组元素的地址表示如下:a是二维数组名,也是二维数组0行的首地址,等于1 000。a[0]是第1个一维数组的数组名和首地址,因此也为1 000。*(a+0)或*a是与a[0]等效的,它表示一维数组a[0]0号元素的首地址,也为1 000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1 000。因此,a,a[0],*(a+
6、0),*a,&a[0][0]是相等的。同理,a+1是二维数组1行的首地址,等于1 008。a[1]是第2个一维数组的数组名和首地址,因此也为1 008。&a[1][0]是二维数组a的1行0列元素地址,也是1 008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。8.6.2通过地址引用二维数组元素对于二维数组a,其a[0]数组由a指向,a[1]数组则由a+1指向,a[2]数组由a+2指向,依此类推
7、。因此,*a与a[0]等价、*(a+1)与a[1]等价、*(a+2)与a[2]等价,即对于a[i]数组,由*(a+i)指向。由此,对于数组元素a[i][j],用数组名a的表示形式为*(*(a+i)+j)指向该元素的指针为*(a+i)+j【例8-14】求二维数组元素的最大值。该问题只需对数组元素遍历,即可求解。因此,可以通过顺序移动数组指针的方法实现。程序如下:#includevo
此文档下载收益归作者所有