




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言数组指针和指向数组的指针变量数组名作函数参数数组名可以作函数的实参和形参。如:main()int array10;f(array,10);f(int arr,int n);array为实参数组名,arr为形参数组名。在学习指针变量之后就更容易理解这个问题了。数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。这就好象同一件物品有两个彼此不同的名称一样。同样,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用。【例10.15】float aver(float *pa);main()float sco5,av,*sp;int i;sp=sco;printf(ninput 5 scores:n);for(i=0;i5;i+) scanf(%f,&scoi);av=aver(sp);printf(average score is %5.2f,av);float aver(float *pa)int i;float av,s=0;for(i=0;i5;i+) s=s+*pa+;av=s/5;return av;【例10.16】将数组a中的n个整数按相反顺序存放。算法为:将a0与an-1对换,再a1与an-2 对换,直到将a(n-1/2)与an-int(n-1)/2)对换。今用循环处理此问题,设两个“位置指示变量”i和j,i的初值为0,j的初值为n-1。将ai与aj交换,然后使i的值加1,j的值减1,再将ai与aj交换,直到i=(n-1)/2为止,如图所示。程序如下:void inv(int x,int n) /*形参x是数组名*/int temp,i,j,m=(n-1)/2;for(i=0;i=m;i+)j=n-1-i;temp=xi;xi=xj;xj=temp;return;main()int i,a10=3,7,9,11,0,6,7,5,4,2;printf(The original array:n);for(i=0;i10;i+)printf(%d,ai);printf(n);inv(a,10);printf(The array has benn inverted:n);for(i=0;i10;i+)printf(%d,ai);printf(n);对此程序可以作一些改动。将函数inv中的形参x改成指针变量。【例10.17】对例10.16可以作一些改动。将函数inv中的形参x改成指针变量。程序如下:void inv(int *x,int n) /*形参x为指针变量*/int *p,temp,*i,*j,m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i=p;i+,j-)temp=*i;*i=*j;*j=temp;return;main()int i,a10=3,7,9,11,0,6,7,5,4,2;printf(The original array:n);for(i=0;i10;i+)printf(%d,ai);printf(n);inv(a,10);printf(The array has benn inverted:n);for(i=0;i10;i+)printf(%d,ai);printf(n);运行情况与前一程序相同。【例10.18】从0个数中找出其中最大值和最小值。调用一个函数只能得到一个返回值,今用全局变量在函数之间“传递”数据。程序如下:int max,min; /*全局变量*/void max_min_value(int array,int n)int *p,*array_end;array_end=array+n;max=min=*array;for(p=array+1;pmax)max=*p;else if (*pmin)min=*p;return;main()int i,number10;printf(enter 10 integer umbers:n);for(i=0;i10;i+)scanf(%d,&numberi);max_min_value(number,10);printf(nmax=%d,min=%dn,max,min);说明:1. 在函数max_min_value中求出的最大值和最小值放在max和min中。由于它们是全局,因此在主函数中可以直接使用。2. 函数max_min_value中的语句:max=min=*array;array是数组名,它接收从实参传来的数组numuber的首地址。*array相当于*(&array0)。上述语句与 max=min=array0;等价。3. 在执行for循环时,p的初值为array+1,也就是使p指向array1。以后每次执行p+,使p指向下一个元素。每次将*p和max与min比较。将大者放入max,小者放min。4. 函数max_min_value的形参array可以改为指针变量类型。实参也可以不用数组名,而用指针变量传递地址。【例10.19】程序可改为:int max,min; /*全局变量*/void max_min_value(int *array,int n)int *p,*array_end;array_end=array+n;max=min=*array;for(p=array+1;pmax)max=*p;else if (*pmin)min=*p;return;main()int i,number10,*p;p=number; /*使p指向number数组*/printf(enter 10 integer umbers:n);for(i=0;i10;i+,p+)scanf(%d,p);p=number;max_min_value(p,10);printf(nmax=%d,min=%dn,max,min);归纳起来,如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系有以下种:1. 形参和实参都是数组名。main()int a10;f(a,10)f(int x,int n)和指的是同一组数组。2. 实用数组,形参用指针变量。main()int a10;f(a,10)f(int *x,int n)3. 实参、型参都用指针变量。4. 实参为指针变量,型参为数组名。【例10.20】用实参指针变量改写将n个整数按相反顺序存放。void inv(int *x,int n)int *p,m,temp,*i,*j;m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i=p;i+,j-)temp=*i;*i=*j;*j=temp;return;main()int i,arr10=3,7,9,11,0,6,7,5,4,2,*p;p=arr;printf(The original array:n);for(i=0;i10;i+,p+)printf(%d,*p);printf(n);p=arr;inv(p,10);printf(The array has benn inverted:n);for(p=arr;parr+10;p+)printf(%d,*p);printf(n);注意:main函数中的指针变量p是有确定值的。即如果用指针变作实参,必须现使指针变量有确定值,指向一个已定义的数组。【例10.21】用选择法对10个整数排序。main()int *p,i,a10=3,7,9,11,0,6,7,5,4,2;printf(The original array:n);for(i=0;i10;i+)printf(%d,ai);printf(n);p=a;sort(p,10);for(p=a,i=0;i10;i+)printf(%d ,*p);p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑施工-安全培训课件-BIM与安全
- DB5404-T 0016-2024 林芝乌龙茶加工技术规范
- 社会科学研究方法 课件 第七章 调查研究
- 醉鹅娘红酒知识培训课件
- 老年人护理教学课件
- 企业数字化升级方法论谢陵春
- 老年人培训养生知识课件
- 老年人合理用药课件
- 老年人再婚教学课件
- 老年人中医健康知识培训课件
- 2025-2026秋安全主题班会教育记录(22周):第1周秋季开学安全第一课
- 2025-2026学年粤人版(2024)初中地理八年级上册教学计划及进度表
- 2025年上半年系统架构设计师《综合知识》考试真题及答案
- 牧护关镇街道小学2025-2026学年第一学期工作计划
- 2025年《医疗器械监督管理条例》培训考核试卷附答案
- 2025-2030矿山机械跨境电商新模式拓展及品牌出海战略报告
- 养老金融科普知识培训课件
- 慢性咳嗽大讲堂课件
- 互联网企业文化调研报告及分析框架
- 农村商业银行三年发展战略规划与实施方案
- 暂住人员管理办法
评论
0/150
提交评论