版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 指针与函数本章重点ll指针作为函数的参数。 指针函数的定义。10.1 指针与函数参数函数的参数可以是变量、变量地址、数组名或指针变量。实际上函数参数为变量的地址、指针、数组名都属于地址传递的方式。1 变量的地址作为函数参数。例101 变量的地址作为函数参数的例子。#include<stdio.h>void f(int *p) /*由于实参为变量的地址,形参一定是指针*/printf(“%dn”,*p);void main( )int x=5;f(&x); /*变量的地址作为实参*/解析:参数传递的情况如图10.1所示,由于实参为变量的地址,形参一定是指针,因为只有
2、指针才能指向变量的地址。变量x的地址传给指针p,p的值为&x,即指针p指在x的地址上,指针p所指的地址上的内容即为变量x的值。第10章 指针与函数图10.1 变量的地址传递给指针 思考:下列程序中的函数fun是以变量的地址作为函数参数传递,请分析程序执行的结果。#include<stdio.h>void fun(int *p)*p=*p>0?*p:-*p;void main( )int x;printf("input a numn");scanf("%d", &x):fun(&x); /*此函数的调用以语句的形式
3、出现*/printf("the absolute value is %d", x);2指针作为函数的参数。例102 指针变量作为函数参数的例子。#include<stdio.h>void f(int *p)printf(“%dn”,*p);void main( )int x=5,*p;p=&x;f(p);解析:参数传递的情况如图10.2所示,由于实参为指针,形参也一定是指针,因为只有指针才能指向变量的地址。实参p指向变量x的地址,传给指针p,p的值为&x,即指针p指在x的地址上,指针p所指的地址上的内容即为变量x的值。C语言程序设计图10.2 变
4、量的地址传递给指针例10.3 通过调用函数,函数的参数为指针,在函数中交换两数。#include<stdio.h>void swap(int *p1,int *p2)int p;p=*p1;*p1=*p2;*p2=p;void main( )int a,b;int *p1,*p2;scanf("%d,%d",&a,&b);p1=&a;p2=&b;swap(p1,p2);printf("n%d,%dn",a,b);假定程序在执行时,从键盘输入:3,5(回车),即a、b的值分别为3、5,此时调用函数swap(p1,
5、p2),在函数swap中使得指针p1、p2所指的地址上的内容进行交换,即a、b的值交换,如图10.3所示。第10章 指针与函数形参pp1 p2实参p1 p2(a)执行到函数swap中语句int p;时的参数传递情况形参p p2 p1实参 p1p2(b)执行到函数swap中语句*p2=p;时的参数情况实 参 a b p1 p2(c)回到main函数时,形参p、p1、p2被释放,a、b的值已交换图10.3 实参、形参相互关系例10.4 在main函数中读入两个字符串,调用自定义函数strcmp,比较两个字符串的大小,实参用数组名,形参用指针。解析:字符串比较时,返回的是第一个不同字符的差值。因而函
6、数的返回值类型为int,函数的原型可以写成:int strcmp(char *p1,char *p2),程序设计如下:#include<stdio.h>void strcmp(char *s1,char *s2)for(;*s1!=0;s1+,s2+)if(*s1!=*s2) break;return(*s1-*s2);C语言程序设计void main( )char str190,str290;gets(str1);gets(str2);printf("%dn",strcmp(str1,str2);思考:用指针传递的方式,调用一个函数,求一个字符串的长度。 例1
7、0.5 在main函数中读入一个由数字字符组成的字符串,把此字符串作为函数的参数,调用此函数,把它转换为一个整型数,返回到main函数。解析:用表达式*p-0把一个数字字符转化为数字,如字符串“12”,计算1-0得到1,然后乘10,再加上2-0,程序的流程如图10.4所示。图10.4 程序流程图程序设计如下:#include<stdio.h>int ctoi(char *p)int sum=0;while(*p)sum*=10;sum+=*p-0;p+;return sum;第10章 指针与函数void main( )char str5;int x;scanf("%s&q
8、uot;,str);x=ctoi(str); /* 数组名作为函数的参数 */printf("x=%dn",x); 例10.6 设计一个程序,在main( )中输入一个字符串,然后再输入一个字符,调用一个函数void del_char(char *p,char x),删除指针p所指字符串中的x这个字符。解析:函数的的流程图如图10.5所示。图10.5 流程图程序设计如下:#include<stdio.h>#define N 80void del_char(char *p,char x)char *q=p;for(;*p!=0;p+)if (*p!=x) *q+=
9、*p;*q='0'void main( )char cN,*pt=c,x;printf("enter a string:");gets(pt);C语言程序设计printf("enter the char deleted:");x=getchar( );del_char (pt,x);printf("The new string is :%sn",c);10.3 返回值为指针的函数函数被调用后,可以由函数中的return语句返回一个值到主调函数中。函数的返回值可以是整型值、字符值、实型值等,也可以是返回指针型的数据,即地
10、址。返回值为指针的函数,与以前的函数概念类似,只是返回的值的类型是指针类型而已,此类函数通常称为指针函数。指针函数定义形式:类型名 *函数名(形参表定义)函数体如:int *func(int x,int y);其中,func是函数名,其返回值类型是“指向整型的指针”,也即函数值是一个指针,指向一个整型变量,函数的形参为int x 和int y。例10.10 由键盘输入112自然数,再调用指针函数输出英文名被调用程序中应定义指针函数。#include<stdio.h>char *month_name(int n)static char *name13="ILLEGAL&qu
11、ot;,"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBET","NOVEMBER","DECEMBER"return(n<1 | n>12)? name0:namen);void main() char *month_name
12、(int); /*说明一个指针函数,由于函数定义在先,此语句可省略*/第10章 指针与函数int n;scanf("%d",&n);printf("%s",month_name(n); 例10.11 编一函数,在一组字符串中找出按字典序最大的字符串。#include<stdio.h>#include<string.h>char *find_max(char *str,int n) /声明函数返回值为指向字符的指针int i;char *p;p=str0; /假设str0及p所指向的字符串按字典序最大 for(i=1;i<n;i+)if(strcmp(stri,p)>0)p=stri; /使p指向按字典序最大的字符串return p; /返回指针值void main()char *a5="ABc","abc","Abc","abcd","abca"printf("%sn",find_max(a,5);运行结果:abcd解析:char *find_max(char *str,int n)声明函数返回值为一个指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024家用电器销售合同范本
- 2024年度景区岗亭设计与施工合同2篇
- 2024婚前债务责任划分协议版
- 2024年材料预付采购协议标准化模板版
- 2024年度高层管理人员劳动合同2篇
- 2024年度社保缴纳义务履行与代缴合同3篇
- 2024年全新商业中介佣金协议电子版版
- 2024年展览会场地租赁合同书3篇
- 2024年二手车购买合同范本
- 基于树莓派课程设计
- 五年级家长会英语老师发言(课堂PPT)
- 深度学习数学案例(课堂PPT)
- hp设备巡检报告
- 卧式钻床液压系统设计课件
- 水库维修养护工程施工合同协议书范本
- 铁路防护栅栏施工组织设计方案最终
- 塑胶材料的特性
- 高处作业教案(共47页)
- MS培养基及配制注意事项
- ASMEB16.5-2003-中文版
- 课程设计 二级直齿圆柱齿轮减速器设计.doc
评论
0/150
提交评论