《C语言中级教程 再谈数组-7》.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《C语言中级教程 再谈数组-7》.ppt

* C语言中级培训 七、再谈数组 数组的概念 是一种初级(语言级)形式的数据结构。 数组的特点 无名; 连续; 有序; 等大小; 个数固定(除了在堆上分配); 数组的本质 int A[10]; A[i]=32;//此句说明了什么? 充分使用了特点:首址 + 偏移量 是对元素进行访问的手段,但不是唯一的手段。 数组的初始化 对字符数组初始化时,若指定元素个数,则编译器会自动加尾\0,否则不加(若没有指定元素个数,则不加)。但若采用双引号初始化,则会加 。 char a1[10]={a,b,c,d}; char a2[ ] = {x,y,z}; char a3[ ] = sdfg; printf(%s\n,a1); printf(%s\n,a2); printf(%s\n,a3); 运行结果: abcd xyz乱码 sdfg 函数中的数组 不要以为函数尚未调用时,数组也没分配空间,若用参数为数组指定元素个数,等函数被调用时,形参就有值了,此时创建数组m和n都已确定,于是就写成: void user(int m,int n) { char A[m][n]; … } 但这样写是错误的。因为这段代码是编译器在编译时就为A数组“规划了”空间需求,尽管尚未真正分配空间。而变量的值未定,编译器无法得到需求信息,无法完成数组的编译 。 其内幕就是:在内存的堆区,存放第一个元素的位置之前,开辟了一个int型的无名单元,用来存放元素个数,其地址的计算公式是: A - sizeof(int) 。所以,sizeof( A )会得到A数组所占的总字节数。 但在静态区和栈区,则是将元素个数信息保存在“变量名表”中。 当用指针指向该数组时,指针无法保存这个信息,虽然可以访问到每个数组元素,但只知道地址,并不知道是在对数组操作。这正是数组与指针的区别。 数组知道自己有多少个元素 多维数组的概念 应用了嵌套原理的一维数组。 数组不再是基本类型,而是一种组合类型,是基本类型的扩展 。 可以断言: 在C语言中压根就没有多维数组! 若将一维数组看作是一家一户的平房,它们排列成街道;那么二维数组就是一栋栋的楼房,每个门洞是各楼层住户的公共入口(行地址)。要访问某家住户,首先要找到哪栋楼(二维数组),然后确定是哪个门洞(行),最后再确定是哪层楼(列元素)。 C语言将多维数组的访问变成了多次的一维访问。 A[9][0] A[9][1] A[9][2] A[9][3] A[9][4] A[0][0] A[0][1] A[0][2] A[0][3] A[0][4] ... ... 一维数组A[9] 一维数组A[2] 一维数组A[1] 一维数组A[0] ... ... int A[10][5] ; A[0] A[1] A[2] A[9] ... ... 二维数组的存储模式: C语言只能处理一维的数组. 对二维数组,C语言进行了“降维”处理。即将二维数组视为一个特殊的一维数组,它的每个元素都是个一维数组。这个数组和内嵌的一维数组依然满足一维数组的一切特点(无名,连续,等大小)。 也就是说,充当数组元素的内嵌一维数组是一种特殊的大元素,C 语言把它视为一种特殊类型来处理。从而解决了多维的难题。 二维数组的三种视角: 若有 int a[5][3]; 可视为一个二维数组; 可视为由五个大元素组成的一维数组,每个元素的类型是 int[3] 型,称之为“一维数组类型”; 还可视为纯粹由15个整型元素组成的一维数组; 三种不同的视角,提供了不同的访问方法 。 但无论看作什么形式,它们在内存中的存储形式是一样的。 对于“大元素”、“类型嵌套”还可以这样理解: 使用typedef int D [10]; 语句之后, 再定义 D A ;就相当于int A[10]; 若定义 D B[5];就相当于int B[5][10]; 经typedef定义的int [10]就是用户自定义的一维数组类型。就是“大元素”的类型。 画出二维数组的内存使用示意图。 二维数组的内存 一维数组 int A[ 10 ]; 中的A等价于定义了一个指向元素的指针:int * const A; 二维数组 int B[3] [4]; 中的B等价于定义了

文档评论(0)

wgvi + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档