浅析c语言的函数调用

浅析c语言的函数调用

ID:9357486

大小:47.50 KB

页数:13页

时间:2018-04-28

浅析c语言的函数调用_第1页
浅析c语言的函数调用_第2页
浅析c语言的函数调用_第3页
浅析c语言的函数调用_第4页
浅析c语言的函数调用_第5页
资源描述:

《浅析c语言的函数调用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、浅析c语言的函数调用C语言中的函数调用形式差别在形参的不同或是返回类型的不一样,下面来谈一下这些函数。第一种也是最简单的一种:请看下面例子:/*该函数实现比较两个值的大小*/#include#includeintcompare(intx,inty){intz;if(x>=y)z=1;elsez=0;returnz;}intmain(void){intx,y,z;printf("pleaseinputthexandy!");scanf("%d%d",&x,&y);z=compare(x,y);p

2、rintf("%d",z);returnEXIT_SUCCESS;}这个函数知识简单比较x,y的值,将x,y传递给compare函数,而后返回z值。这里讲一下函数传递的两个规则:1、函数之间的调用关系是传值调用的;2、对于指针或是数组名传递的参数则是传址调用的,但这第一条不矛盾。具体在下面讲。对于规则1的解释是调用程序传递的是变量或实参的一份拷贝,给被调用程序的是一份复制品,这样被调用的函数才不致于随便改动调用程序的数据(这也有例外)。下面是例子程序://该函数原本是打算实现交换两个值的,结果实现不了!#include

3、.h>#includeintswap(intx,inty){inttemp;temp=x;x=y;y=temp;}intmain(void){intx,y;printf("pleaseinputthexandy!");scanf("%d,%d",&x,&y);swap(x,y);printf("%d,%d",x,y);returnEXIT_SUCCESS;}试运行这个程序,你会发现,打印出来的仍是x,y的原值,调用函数没有起到任何作用,或是说程序并没有达到你所想的效果。这就印证了刚才所说的传值是实参的一份拷

4、贝而已!第二种是传递的参数是指针,请看下面例程:/*该函数实现两个数交换其值*/#include#includeintswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}intmain(void){intx,y;/*定义两个指针变量指向x与y*/int*p=&x,*q=&y;printf("pleaseinputthexandy!");scanf("%d,%d",&x,&y);/*注意这里的调用形式,必须加上这个"&"符号*/swap(&x,&y)

5、;printf("%d,%d",x,y);returnEXIT_SUCCESS;}这个程序时对上面程序的改进或者说是纠正,这样x,y才能交换其值。可是你也许会问这时为什么呢?仅仅改变为指针形式就可以吗?是的,让我慢慢道来:这确实是刚才所说的一份拷贝,但现在拷贝的是一份指针,就是指向x,y的指针,但是通过swap函数里的却可以间接访问在主函数里的x,y的值,所以也就可以修改主函数的值了,但这时主函数的指针值确实改变不了的,因为主函数仅仅是传递了一份拷贝,任凭swap函数这么修改这份指针,始终改不了主函数的指针。现在明白了吗?第三种:

6、传递的是数组名,请看下面的例程:/*该函数实现将某一字符串中的小写改为大写字母,其余的不变*/#include#includevoidchange(char*string){inti=0;/*记住这种写法“*(string+i)”*/while(*(string+i)!=''){if(*(string+i)>='a'&&*(string+i)<='z')*(string+i)-=32;i+=1;}}intmain(void){charstring[1000]={"Hello,myworld!"

7、};change(string);printf("%s",string);returnEXIT_SUCCESS;}这种就和上面的第二种情况很类似,传递给change函数的是一个指向字符数组首元素的指针的拷贝,仿佛是通过传址调用的,但实际上和刚才说的,尽管传递的是指针拷贝,但还是能改变主函数的数据。对于被调用函数头还可以用这种表达方式:voidchange(charstring[])。对于被调用函数的调用形式应该是程序所写的那样,而不应该写成change(charstring),这样gcc环境下编译会出现这样的“taioshi.c:

8、17:parseerrorbefore"char"”提示错误。顺便提一下,在change函数,出现了const关键词,这里有一个细微的表达差别:charconst*string与char*conststring,前者是指

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。