- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
若有p=a(p指向数组a),则: p++(或p+=1),表示p指向下一元素。 *p++与*(p++)等价。同样优先级,结合方向为自右向左。 *(p++) 与*(++p)。 前者是先取*p的值,后使p值加1,相当于a[i++];后者是先使p加1,再取*p,相当于a[++i]。 (*p)++表示p所指向的元素值加1,而非指针值加1。 * 例:输出a数组10个元素。 …… p=a; while(pa+10) { printf(“%d”,*p); p++; } …… …… p=a; while(pa+10) printf(“%d”,*p++); …… 等价 * 4、指针变量与动态存储分配 几个相关函数: malloc(size) 分配1个长度为size的连续空间,返回值为一指针,其值是该分配区域的起始地址。如不成功,返回0。 calloc(n,size) 分配n个长度为size的连续空间。其余同上。 free(ptr) 释放ptr所指向的空间(ptr必须是由上述函数得到的) * 5、数组名及指向数组的指针变量 作函数参数 数组名可以作为函数的形参和实参。当用数组名作参数时,如果形参数组中各元素的值发生变化,实参数组元素的值随之变化。因为二者共占同一段内存空间。 当指向数组的指针变量时作函数参数时,也可得到同样的结果。 * 【例10.5】用二分查找法(折半查找)从一个已排好序的数列中查找一个数,判定此数是否属于该数列。 算法图例: 1 2 3 4 5 6 7 8 9 从数列中查找9: ? ? ? ? 二分查找法的执行效率很高,若数列长度为num, 且该数的位置在 (2n-1,2n )之间,最多查找次数n次。 * int b_search(m,num,key) /*二分查找法*/ int m[ ],num,key; { int l,h,mid; l=0; h=num-1; while(l=h) { mid=(l+h)/2; if (keym[mid]) h=mid-1; else if (keym[mid]) l=mid+1; else return(mid); } return(-1); } 等价于: int *m, num, key ; 【例10.5】 * 【例10.5】 main( ) { static int b[]={10,12,13,14,25,34,72,88,100}; int k,i,j; printf(The arranged array is :\n); for(i=0;i9;i++) printf(%d ,b[i]); printf(\n); printf(Please input the key number :\n); scanf(%d,j); k=b_search(b, 9, j); if(k==-1) printf(”It is not in the list of array b\n); else printf(”It is %dth element of the array b\n,k); } * 归纳: 当主调函数中有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系可以有四种情况: 实参形参都用数组名 实参用数组名,形参用指针变量 实参形参都用指针变量 实参用指针变量,形参用数组名 * (1)实参、形参都用数组名 函数调用时,参数之间传递的是数组的首地址,二者(实参数组形参数组)共用一段内存空间(实际上指的是同一个数组)。 main( ) { int a[10]; …… f(a,10); …… } f(x,n) int x[],n; { …… } * (2)实参用数组名,形参用指针变量 实参a为数组名,形参x指向a[0],即x=a[0]。通过x值的改变,可以指向a数组的任一元素。 main( ) { int a[10]; …… f(a,10); …… } f(x,n) int *x, n; { …… } * (3)实参、形参都用指针变量 二者皆指向同一数组a,通过x值的改变,可以指向数组a的任一元素。 main( ) { int a[10],*p; p=a; …… f(p,10); …… } f(x,n) int *x, n; { …… } * (4)实参用指针变量,形参用数组名 实参p为指针变量,值为a[0]。先使指针p指向数组a,即p=a;然后将p的值传给形参数组名x,使x取得数组a的首地址。其它同第一种情况。 main( ) { int a[10],*p; p=a; …… f(p,10); …… } f(x
您可能关注的文档
最近下载
- 2025至2030年中国机器人关节模组行业市场竞争态势及前景战略研判报告.docx
- 员工冲突管理培训.pptx VIP
- 新课标人教版 宾语从句 复习课件.ppt VIP
- 厂务系统介绍.ppt VIP
- 2024年10月广东省高等教育自学考试00020高等数学(一)试卷及答案.pdf
- 英语人教版八年级下册unit5 setionB 课件.ppt VIP
- 人教版新目标八年级上册英语导学案(全册).pdf VIP
- 人教版九年级英语Unit 2 reading-The Spirit of Christmas.pptx VIP
- 丹毒中医护理方案ppt课件.pptx VIP
- 人教版九年级英语unit8全单元课件.ppt VIP
文档评论(0)