- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.4 指针作为函数的参数 ?指针作为变量,也可以用来作为函数的参数。 ?若函数的参数类型为指针型,则实参与形参的传递是一种“传址”方式。 ?如果函数中有对形参值的改变,实际上也就是修改了实参的值。 整型数据、实型数据或者字符型数据均可以作为函数的参数。当使用指针作为函数的参数时,可以从函数中得到多个返回值。 【例】使用指针作为函数参数的简单示例。void fun(int *p1,int *p2){*p1=1;*p2=2;}main(){ int x,y; fun(x,y); printf(%d,%d\n,x,y);}运行显示:1,2 在main函数中并未对x、y赋值,而是把x和y的地址作为实参传给了fun函数。函数的形参*p1和*p2都是指针变量,它可以存放地址,从而能接受从函数传来的实参x和y。假如x和y已分配的地址为1012和1014,则函数中p1和p2的值也为1012和1014。函数fun的任务是将数据1,2分别送给指针p1,p2所指向的变量。在实现这两个赋值语句时,先找到p1和p2,从中得到它们的值1012和1014,然后再找到1012和1014单元,将1和2分别放到这两个地址的整型变量单元中。这样x和y也就得到了值。于是,在main函数中就可以输出x和y的值。 一些说明 前面曾得到这样的结论,即“函数参数的传递是单向的,调用一次函数最多可以得到一个返回值”。初看起来,上面的例子与这个结论似有矛盾,实际上这并不矛盾。程序中从main函数传递到fun函数的数据是变量x和y的地址,即x和y。这两个函数参数x和y在函数调用过程中,传递方向确实是单向的,也就是说,只有x和y传给p1和p2的过程,而没有从p1和p2将数据传回到x和y的过程。因此,函数参数x和y的值并没有改变。 从某种程度上说,以指针作为函数参数时,数据传送的方向是“双向的”。函数fun()是根据形参指针变量中存放的地址值向实参变量单元赋值,从而使实参变量单元得到所需的值。在C语言中,通常把这种用指针作为函数参数的传递方式称为“引用调用”。通过以上叙述可看出:用指针(地址)作函数参数,可以实现“通过被调用的函数改变主调函数中的变量值”。 前边的程序实际上与如下形式等价:main(){ int x,y,*p1=x,*p2=y; *p1=1;*p2=2; printf(%d,%d,x,y);} 8.4 指针作为函数的参数 例15:用字符指针指向从键盘输入的字符串,编写程序,计算输入的字符串的长度。输入结束时的换行符不作为字符计入其长度。 分析: 用字符指针来表示字符串时,指针指向的是字符串的首地址。 输入结束时,系统会将结束标志‘\0’置于字符串的尾部。 计算字符串的长度时,结束标志是不计数的。 ?若输入的字符串为“abcdefg”,则占用的内存单元为8个,但字符串的长度为7。 ?设计函数int getlength(char *str),计算str所指字符串的长度。 字符串的结束标志和输入的换行符均不计入字符的长度。 程序:example8_15.c 8.4 指针作为函数的参数 ?请分析统计字符串长度函数的算法。 ?思考: 程序中结束标志(‘\0’)和换行符(‘\n’)均不计入字符的长度,若用如下的程序语句: while(*p!=\0 || *p!=\n) p++; 来统计字符串的长度,是否能达到要求?为什么? 提示:分析原来程序中*p!=‘\0’ 和*p!=‘\n’是什么逻辑关系,改动后逻辑关系改变成什么了 8.5 函数的返回值为指针 ?一个函数在被调用之后可以带回一个值返回到主调函数,这个值不仅可以是整型、实型或字符型等,也可以是一个指针类型的数据。例如:int *fun(int a,float b); 它表示fun是一个函数,带回一个整型指针数据。a和b是函数的形参。注意,不要写成int (*fun)(int a,float b),这个格式表示定义一个指向函数的指针变量。 指针作为一种变量,也可以作为函数的返回值。 ?若函数的返回值为指针,则称其为指针函数。 ?指针函数的定义形式为: [存储类型] 数据类型 *函数名 ([形参表]); 例如: int *fun1( ); /* 函数返回一个指向整型变量的指针 */ char *fun2( ); /* 函数返回一个指向字符型变量的指针 */ 例16:编写程序,从键盘输入一个字符ch,在字符串string中查找是否存在有该字符,若存在,给出该字符在字符串中第1次出现的位置。 分析:对于指定的字符串string,在
您可能关注的文档
- 第1章.商末尾有0的除法.练习课(373KB).PPT
- 第七章节参数估计课件1章节(1623KB).ppt
- 第1章.师恩难忘课件用(633KB).ppt
- 第七章节仓储法律制度课件(1196KB).ppt
- 第1章.藤野先生1章节(356KB).ppt
- 第七章节产品制造企业及其企业会计课件(1036KB).ppt
- 第1章.藤野先生11章节(704KB).ppt
- 第1章.藤野先生课件1章节(1975KB).ppt
- 第七章节常微分方程数值解法课件(2005KB).ppt
- 第七章节常微分方程数值解课件1章节(514KB).ppt
- 第2版电子课件office2003版C语言第2版第9章结构2003版(1179KB).ppt
- 第2版电子课件office2003版C语言第2版第10章文件2003版(196KB).ppt
- 第2版电子课件office2003版C语言第2版第11章位运算2003版(230KB).ppt
- 第2波导章传输线(337KB).ppt
- 第2次课02文件的基本操作(229KB).ppt
- 第2次课课件(455KB).ppt
- 第2次课网络安全概述认识计算机网络安全技术(1483KB).ppt
- 第2单元5.北京喜获2008年奥运会主办权(1566KB).ppt
- 第七章节木结构工程课件(824KB).ppt
- 第2单元5.词两首(1403KB).ppt
文档评论(0)