




免费预览已结束,剩余24页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,主讲人:朱立华,2009.8朱立华俞琼王立柱,1,2009.8朱立华俞琼王立柱,2,2009.8朱立华俞琼王立柱,3,内容提要,与二维数组相关的各类指针,本章介绍二维数组的有关知识,动态二维数组空间的申请与释放(选讲),内容提要,2009.8朱立华俞琼王立柱,4,重点难点提示,重点难点提示,2009.8朱立华俞琼王立柱,5,二维数组的定义,哪里需要二维数组?类型相同的一组数,如果在序列中只受一种序号标明其在整个序列中的顺序,用一维数组,例如:1门课各个同学的成绩类型相同的一组数,如果在序列中需要用两种序号标明其在整个序列中的顺序,则要用二维数组,例如:3门课各个同学的成绩矩阵问题强调元素所在的行、列位置,必须用二维数组二维数组的定义形式:类型标识符数组名整型常量表达式1整型常量表达式2;例:inta43;/定义4行3列的整型二维数组,数组名为a,二维数组的元素类型,二维数组名是一个用户自定义标识符,指明二维数组的行数,指明二维数组的列数,2009.8朱立华俞琼王立柱,6,二维数组的定义,二维数组的实质分析:二维数组是一维数组的一维数组(递归定义)例:inta43;(1)这里,a是二维数组名,也可以理解成是一维数组名a,它有4个元素,分别为a0、a1、a2、a3(2)a的4个元素不是普通的变量,而是都分别是一维数组,称为行一维数组,每一个都有3个int型元素,例:a0的3个元素为:a00、a01、a02(3)因此,二维数组a中共有12(4*3)个int型的元素:a00、a01、a02a10、a11、a12a20、a21、a22a30、a31、a32,它们4个称为行一维数组,第1个下标称为行下标,第2个下标称为列下标,这12个元素称为二维数组元素,行数,列数,2009.8朱立华俞琼王立柱,7,二维数组的定义,二维数组定义中含有3种类型:例:inta43;(1)int43:是二维数组a的类型标识(2)int3:是行一维数组a0a3的类型标识,也是二维数组的基类型(3)int:是二维数组元素a00a32的类型,也是行一维数组的基类型二维数组定义中的常量与变量:例:inta43;(1)二维数组a和行一维数组a0a3均为指针常量(2)二维数组元素a00a32是int型的变量,2009.8朱立华俞琼王立柱,8,二维数组的初始化,二维数组在定义的同时可为其元素赋值,称为初始化,原则:行从左到右依次,每行中列从左到右依次(1)逐行初始化:inta43=1,2,3,4,5,6,7,8,9,10,11,12;(2)行数可以缺省,列数不能省,自动算行:inta3=1,2,3,4,5,6,7,8,9,10,11,12;(3)不分行,用类似一维数组的方式初始化:inta43=1,2,3,4,5,6,7,8,9,10,11,12;(4)初始化数据不足,系统用0补充:inta43=1,2,4,5,7,8,9,10,11,12;(5)最简单的初始化:inta43=0;,每行单独用一对大括号括起,共有两层大括号,只有一层大括号,等效于inta43=1,2,0,4,5,0,7,8,9,10,11,12;,第1个元素初始化为0,其余未初始化的元素值自动为0,行数计算出来为4,不初始化时不能缺少行数,2009.8朱立华俞琼王立柱,9,二维数组的初始化,错误的初始化示例:(1)未遵守行从左至右依次初始化原则:inta43=,4,5,6,7,8,9,10,11,12;(2)同一行中未遵守列从左至右依次初始化原则:inta43=1,3,4,5,6,7,8,9,10,11,12;inta43=1,2,3,5,6,7,8,9,10,11,12;(3)不分行,用类似一维数组的方式初始化,未按顺序:inta43=1,2,4,6,7,8,9,10,11,12;(4)省略列号:inta4=1,2,3,4,5,6,7,8,9,10,11,12;,第1行没有初始化,后面行就不能初始化,第1行第2列没有初始化,第3列就不能初始化,第2行第1列没有初始化,第2、3列就不能初始化,二维数组初始化中列号一定不能省略,2009.8朱立华俞琼王立柱,10,二维数组元素的访问,0i30j2,二维数组元素可随机访问,因为每个元素地址可计算Loc(aij)=a+(i*m+j)*sizeof(二维数组元素类型),数组元素的表示形式:例:inta43;(1)最常用的是下标(行、列)法:aij(2)间接引用法与下标法结合:*(ai+j)、(*(a+i))j(3)间接引用法:*(*(a+i)+j)二维数组元素在内存中的存储形式:先行后列依次,行下标,列数,列下标,2009.8朱立华俞琼王立柱,11,二维数组元素的访问,一般要对所有的数组元素执行同样的操作,与一维数组类似,用循环结构控制,二维数组需用两层循环例:inta43,n=1,i,j;for(i=0;i4;i+)for(j=0;j3;j+)aij=n+;程序10.1将如下所示的矩阵存入二维数组,然后照原样输出,最后按转置形式输出。算法提示:转置输出不需要另外定义二维数组,只是在控制循环时先控制列下标再控制行下标,2009.8朱立华俞琼王立柱,12,二维数组与一维数组,二维数组名是二维数组指针常量如果按照递归的概念,它也是特殊的一维数组指针例:inta43;(1)指针a的基类型为int3,a指向a0,即a=这里指针d的基类型为double,而指针(/行指针变量pinta43=1,2,3,4,5,6,7,8,9,10,11,12;p=a;/将二维数组指针赋值给行指针变量此时行指针变量p等价于二维数组指针a,有以下等价式:p+i=a+ipi=aipij=aij,对应于二维数组元素类型,对应于二维数组的列数,还可以:p=a+i或p=(2)voidDisplay(intpa3,introw);(3)voidDisplay(intpa43,introw);后两种本质上就是第一种形式,且后两种形式只能出现在形参表中,不能作为行指针变量的定义(或声明)形式,2009.8朱立华俞琼王立柱,18,二维数组与列指针,一个m行n列二维数组,可以看作是长度为m*n的一维数组,因此二维数组可以传址给列指针例:inta43;则a0(或*a或则pi*3+j=aij这样,二维数组也可以通过将其起始列地址传给一个一级指针变量来访问所有的元素,行下标,列数,列下标,2009.8朱立华俞琼王立柱,19,二维数组与列指针,程序10.6寻找矩阵中的马鞍点。一个矩阵中的元素,若在它所在的行中最小,在它所在的列中最大,则称为马鞍点。求一个n*m阶矩阵的所有马鞍点。算法思想:用一个n行m列二维数组a来存储矩阵,一个长度为n的一维数组min存储每行中的最小元素,一个长度为m的一维数组max存储每列中的最大元素。寻找马鞍点的具体方法是:用行控制外层循环,在i行其行中最小元素为mini,在行固定的情况下,用列控制内层循环,用每一列的最大元素值maxj与当前行的mini去比较,如果二者相等,则说明一个二维数组元素aij就是马鞍点。显然,一个矩阵中可能不止一个马鞍点,也有可能没有马鞍点。马鞍点元素加括号输出。,2009.8朱立华俞琼王立柱,20,一维指针数组与二级指针,所谓一维指针数组,就是数组元素为一级指针变量的一维数组。例:char*a5;a是长度为5的一维字符型指针数组,a是指针常量,一维数组元素a0、a1、a2、a3、a4都是一级字符型指针变量,它们各自可以指向一维字符数组,特别是字符串对每个元素(一级指针变量)都可以赋值:a0=File;a1=Edit;a2=Compile;a3=Run;a4=Tools;也可以在定义一维指针数组时进行初始化,如普通一维数组char*a5=File,Edit,Compile,Run,Tools;或char*a=File,Edit,Compile,Run,Tools;,注意:此处不能加括号:而char(*a)5是1个行指针定义,2009.8朱立华俞琼王立柱,21,一维指针数组与二级指针,一维指针数组名可以赋值给何种类型的变量?回顾:一级指针变量与一维数组的关系Typearraysize;/数组array的元素类型为Type,即数组指针的基类型为TypeType*p;/指针变量p的基类型为Type因此:p=array;/指针变量p指向数组array如果有指针数组定义:char*a5,则数组a的元素类型是char*,即数组指针常量a的基类型是char*,则接受a值的指针变量的基类型也应该是char*,故该指针变量类型是char*,称为(字符型)指针的指针,也称二级指针于是:char*pa=a;这时,pai与ai等效,都是指向某一个字符串的首地址,pa为二级指针变量,a为一维指针数组名,2009.8朱立华俞琼王立柱,22,一维指针数组与二级指针,程序10.7主函数中定义指针数组处理多个字符串,函数以指针的指针为形参输出所有字符串的值。输出函数原型:voidDisplay(char*pa,intn);另一种形式:voidDisplay(char*pa,intn);二级指针、一级指针与普通变量的关系:例:charch=A;/定义一个普通字符型变量char*p=/二级指针变量q指向了一级指针p则对字符值的访问形式有等效的3种形式:ch、*p、*q,如下图所示,这种形式的形参本质上就是char*pa,2009.8朱立华俞琼王立柱,23,一维指针数组与二维数组,一维指针数组是元素为一级指针变量的一维数组。每一个一级指针变量可以分别指向长度不同、且彼此空间不相邻的一维数组。二维数组是元素为一级指针常量的一维数组。每一个指针常量分别指向长度相同、彼此空间相邻的一维数组,例:charcColor47=“white”,”red”,”orange”,”pink”;char*pColor4=“white”,”red”,”orange”,”pink”;cColor是二维数组,其元素为cColor0cColor3,它们都是长度为7的字符型一维数组,且在内存中连续存放pColor是一维指针数组,其元素为pColor0pColor3,它们都是一级指针变量,可以指向各独立存放的串首地址,2009.8朱立华俞琼王立柱,24,一维指针数组与二维数组,cColor,cColor0,cColor1,cColor2,cColor3,pColor,pColor0,pColor1,pColor2,pColor3,white0,red0,orange0,pink0,这4个字符串长度相等地址相邻,这4个字符串长度不相等地址不一定相邻,多个字符串的处理,既可以用二维字符数组,又可以用一维指针数组,后者是更常用的处理方式。,2009.8朱立华俞琼王立柱,25,一维指针数组与二维数组,指针数组的每一个元素作为指针变量,可以指向二维数组的行数组,当然,要保证基类型的一致性。前面的例示中,可以用以下循环实现赋值:for(i=0;i4;i+)pColori=cColori;程序10.8指针数组和二维数组。用二维整型数组存储一个矩阵,通过一维指针数组输出矩阵指针数组的元素是指针变量,不仅可以指向静态数组也可以指向动态数组例:int*p4,i;for(i=0;i4;i+)pi=(int*)malloc(3*sizeof(int);,2009.8朱立华俞琼王立柱,26,二维动态空间的申请与释放(选讲),一级指针可以申请动态一维数组空间,同理,二级指针可以申请动态二维数组空间,需要分两步走:用二级指针申请动态二维数组的方法是:(1)首先用二级指针申请一维指针数组空间,指针数组的长度就是动态二维数组的行数;(2)接着用这些一级指针变量分别申请动态一维数组空间,其元素个数就是动态二维数组的列数。释放动态二维数组空间的方法是(与申请顺序相反):(1)用一层循环首先释放所有由一级指针所申请的动态空间先释放二维数组元素空间(2)再直接通过二级指针变量释放一维指针数组空间后释放一维指针数组的空间,2009.8朱立华俞琼王立柱,27,array00array01array02,二维动态空间的申请与释放(选讲),程序10.9通过二级指针变量array申请了row行col列的动态二维数组空间,二维数组的元素为099之间的随机数。最后以矩阵形式输出该动态二维数组。关键语句:int*array,row,col;array=(int*)malloc(row*sizeof(int*);for(i=0;irow;i+)arrayi=(int*)malloc(col*sizeof(int);现在:arrayij就与静态数组元素一样进行访问了,申请一维指针数组空间,该数组含row个元素,再用这row个一级指针分别申请col个二维数组元素空间,array,array0,array1,array10array11array12,若row=2,一维指针数组空间,该数组含2个一级指针元素,若col=3,这是array0申请的一维整型数组,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年辅警招聘考试考前冲刺练习题【培优】附答案详解
- 2025计算机三级真题附答案详解【完整版】
- 2024年执法资格试题含答案详解(研优卷)
- 2025年甘肃工业职业技术学院引进博士研究生15人笔试高频难、易错点备考题库含答案详解
- 2024自考专业(护理)考试历年机考真题集及完整答案详解【名师系列】
- 辅警招聘考试通关考试题库及完整答案详解(名师系列)
- 公务员考试《常识》考前冲刺练习题含答案详解【综合题】
- 网络广告安全培训课件
- 雨水蓄水池设计与施工方案
- 燃气管道通气试验方案
- 2025年新为父母设立居住权协议书
- 食材配送退换货方案
- 安宁疗护服务创新创业项目商业计划书
- 2025年上海市少先队试题及答案
- 肥料及基础知识培训课件
- 机关单位会计试题及答案
- 光伏运行管理办法规定
- 国务院公墓管理暂行办法
- 2025年中考体育笔试题
- 北京辅助生殖管理办法
- 工业控制系统的安全风险评估
评论
0/150
提交评论