资源描述:
《最新C语言程序设计课件第章ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言程序设计课件第章第十章二维数组和指针2009.8朱立华俞琼王立柱22009.8朱立华俞琼王立柱3内容提要与二维数组相关的各类指针二维数组的初始化及元素访问方式二维数组的定义,其中涉及的3种类型本章介绍二维数组的有关知识动态二维数组空间的申请与释放(选讲)内容提要二级指针列指针行指针一维指针数组利用二级指针申请动态二维数组空间如何依次释放申请的所有动态空间二维数组的定义二维数组定义中含有3种类型:例:inta[4][3];(1)int[4][3]:是二维数组a的类型标识(2)int[3]:是行一维数组a[0]~a[3]的类型标识,也是二维数组的基类型(3)in
2、t:是二维数组元素a[0][0]~a[3][2]的类型,也是行一维数组的基类型二维数组定义中的常量与变量:例:inta[4][3];(1)二维数组a和行一维数组a[0]~a[3]均为指针常量(2)二维数组元素a[0][0]~a[3][2]是int型的变量2009.8朱立华俞琼王立柱7二维数组的初始化二维数组在定义的同时可为其元素赋值,称为初始化,原则:行从左到右依次,每行中列从左到右依次(1)逐行初始化:inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};(2)行数可以缺省,列数不能省,自动算行:inta[][3]={{
3、1,2,3},{4,5,6},{7,8,9},{10,11,12}};(3)不分行,用类似一维数组的方式初始化:inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};(4)初始化数据不足,系统用0补充:inta[4][3]={{1,2},{4,5},{7,8,9},{10,11,12}};(5)最简单的初始化:inta[4][3]={0};每行单独用一对大括号括起共有两层大括号只有一层大括号等效于inta[4][3]={{1,2,0},{4,5,0},{7,8,9},{10,11,12}};第1个元素初始化为0,其余未初始化的元素值自动为
4、0行数计算出来为4,不初始化时不能缺少行数2009.8朱立华俞琼王立柱8二维数组的初始化错误的初始化示例:(1)未遵守行从左至右依次初始化原则:inta[4][3]={,{4,5,6},{7,8,9},{10,11,12}};(2)同一行中未遵守列从左至右依次初始化原则:inta[4][3]={{1,,3},{4,5,6},{7,8,9},{10,11,12}};inta[4][3]={{1,2,3},{,5,6},{7,8,9},{10,11,12}};(3)不分行,用类似一维数组的方式初始化,未按顺序:inta[4][3]={1,2,,4,,6,7,8,9,1
5、0,11,12};(4)省略列号:inta[4][]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};中间缺少两个元素,不符合从左到右依次的原则第1行没有初始化,后面行就不能初始化第1行第2列没有初始化,第3列就不能初始化第2行第1列没有初始化,第2、3列就不能初始化二维数组初始化中列号一定不能省略2009.8朱立华俞琼王立柱9二维数组元素的访问a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[3][0]a[3][1]a[3][2]0≤i≤30≤j≤2a[0]
6、a[1]a[2]a[3]二维数组元素可随机访问,因为每个元素地址可计算Loc(a[i][j])=a+(i*m+j)*sizeof(二维数组元素类型)数组元素的表示形式:例:inta[4][3];(1)最常用的是下标(行、列)法:a[i][j](2)间接引用法与下标法结合:*(a[i]+j)、(*(a+i))[j](3)间接引用法:*(*(a+i)+j)二维数组元素在内存中的存储形式:先行后列依次行下标列数列下标2009.8朱立华俞琼王立柱10二维数组元素的访问一般要对所有的数组元素执行同样的操作,与一维数组类似,用循环结构控制,二维数组需用两层循环例:inta[4
7、][3],n=1,i,j;for(i=0;i<4;i++)for(j=0;j<3;j++)a[i][j]=n++;程序10.1将如下所示的矩阵存入二维数组,然后照原样输出,最后按转置形式输出。算法提示:转置输出不需要另外定义二维数组,只是在控制循环时先控制列下标再控制行下标动态演示过程2009.8朱立华俞琼王立柱11二维数组与一维数组二维数组名是二维数组指针常量如果按照递归的概念,它也是特殊的一维数组指针例:inta[4][3];(1)指针a的基类型为int[3],a指向a[0],即a==&a[0],因此a+i指向a[i],即:a+i==&a[i],a+i或&a[
8、i]称为行