- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机二级C语言 第八章指针
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 在这个过程中,有这样的三个问题要解决: (1)如何确定某个水果是最大的一个:我们在看的过程,其实是一个比较的过程:先假设自己手里(心里)拿的就是最大的一个,然后以这个和其它的比较,如果这个假设在以后的比较过程中被推翻了,则以新值和后面的比。这其实就是前面讲过的假设法! 在这个过程中,有这样的三个问题要解决: (2)是否每当出现了比现在的水果更大的水果时,就将手里的水果与这个大的水果进行交换?当然可以,但无此必要!其实我们只需记住这个水果到底有多大,,而不必每次都换! 在这个过程中,有这样的三个问题要解决: (3)如何实现在剩下的水果中继续比较:这和前面的冒泡法相同,可以将一轮比较以后的最大值放在第一个数的位置;然后在进行第二轮比较时,第一个数不再参与比较! 根据以上思路写出的程序如下: sort(int a[ ],int n) { int i,j,k,t; for(i=0;i n-1;i++) { k=i; for(j=i+1;jn;j++) if(a[k] a[j])k=j; if(k!=i) { t=a[k];a[k]=a[i];a[i]=t;} } } 待排序的数组 数组中的元素的个数 如果假设不成立,记下最大的数的位置! 说明我们的假设被推翻,此时a[k]最大 将a[k]与a[i]交换,即是将最大的数放到第一个数的位置上! 四、指向多维数组的指针 用指针指向多维数组时,在概念和使用上比指向一维数组的指针要复杂一些。先看下面的例子: main() { int i,a[10]; for(i=0;i〈10;i++) a[i]=i+1; printf(“%d\n”,a[0]); printf(“%d\n”,a); printf(“%d\n”,*a); } 若要输出数组中的第二个元素,则相应语句为: printf(“%d\n”,*(a+1)); 四、指向多维数组的指针 如果把上例中的数组a的定义改为int a[5][10];结果会如何? main() { int i,j,a[5][10]; for(i=0;i50;i++) for(j=0;j10;j++) a[i][j]=15; printf(“%d\n”,a); printf(“%d\n”,a[0]); printf(“%d\n”,*a); } - 13 - 13 - 13 为什么会这样? 因为在二维数组a[5][10]中,并不存在a[0]这个元素,而我们使用了a[0],系统对它如何看待呢?如下图所示: a0 a00 a01 a02 a03 a04 a05 a06 a07 a08 a09 a1 a2 a3 a4 四、指向多维数组的指针 C系统对于二维数组是这样认识的:二维数组a[5][10]中有5个元素,a[0],a[1]…,而每个元素,如a[0],又由10个元素组成,分别是a[0][0],a[0][1],a[0][2]…a[0][9],由此构成二维数组a[5][10]的50个元素;对于一维数组,数组名代表数组的起始地址,而二维数组的每行元素相当于一个一维元素,数组名分别为a[0],a[1]…,因此,二维数组中的a[i],也就代表第i行元素的起始地址。 四、指向多维数组的指针 既然a+i为数组中第一行的首地址,那么,*(a+i)是什么? 这是二维数组与一维数组间的重大区别: 对于对于一维数组a[10],*a代表第0个元素的值;而对于二维数组a[5][10],*a不是第0个元素的值,而是第0行元素的起始地址。即:* a = = a 因为根本不存在有a[0]这个元素,二维数组中的第一个元素是a[0][0],a[0]代表了整个0行元素的起始地址,所以: (a+0)=a[0]=a=*a= *(a+0) 而 a+1=a[1]=*(a+1)(均为第1行的地址) 因此,要引用第1行、第3列的元素,用数组名应为a[1][3]或*(*(a+1)+3) main() {int a[3][4]={{1,3,5,7},{9…},{…}}; int i,j; for(i=0;i3;i++) { for(j=0;j4;j++) printf(“%4d”,a[i][j]);
您可能关注的文档
最近下载
- Unit 6 Changing for the seasons单元整体教学设计(共六课时)2025-2026学年度人教PEP英语四年级上册.docx VIP
- 中国荨麻疹诊疗指南(2025版).docx VIP
- 急性消化道出血的专家共识.pptx VIP
- 全国中等职业学校管理平台系统操作指南(2022标准版)(1).pptx VIP
- 个人简历模板个人简历模板.docx VIP
- JTT 1502-2024 直升机救生员搜救作业手势信号要求.pdf VIP
- 2025年河北石家庄晋州市人民医院公开招录劳动聘用人员52名笔试备考试题及答案解析.docx VIP
- 人教金学典同步解析与测评五年级上册数学.pdf VIP
- 体例格式9:工学一体化课程《windows服务器基础配置与局域网组建》任务1学习任务工作页.docx VIP
- 宾馆酒店住宿用餐协议.docx VIP
原创力文档


文档评论(0)