网站大量收购闲置独家精品文档,联系QQ:2885784924

浅析c语言的函数调用.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅析c语言的函数调用 C语言中的函数调用形式差别在形参的不同或是返回类型的不一样,下面来谈一下这些函数。 第一种也是最简单的一种: 请看下面例子: /*该函数实现比较两个值的大小*/ #includestdio.h #include stdlib.h int compare(int x,int y) { int z; if(x=y) z=1; else z=0; return z; } int main(void) { int x,y,z; printf(please input the x and y!\n); scanf(%d %d,x,y); z=compare(x,y); printf(%d\n,z); return EXIT_SUCCESS; } 这个函数知识简单比较x,y的值,将x,y传递给compare函数,而后返回z值。这里讲一下函数传递的两个规则: 函数之间的调用关系是传值调用的; 2、对于指针或是数组名传递的参数则是传址调用的,但这第一条不矛盾。具体在下面讲。 对于规则1的解释是调用程序传递的是变量或实参的一份拷贝,给被调用程序的是一份复制品,这样被调用的函数才不致于随便改动调用程序的数据(这也有例外)。 下面是例子程序: //该函数原本是打算实现交换两个值的,结果实现不了! #includestdio.h #include stdlib.h int swap(int x,int y) { int temp; temp=x; x=y; y=temp; } int main(void) { int x,y; printf(please input the x and y!\n); scanf(%d,%d,x,y); swap(x,y); printf(%d,%d\n,x,y); return EXIT_SUCCESS; } 试运行这个程序,你会发现,打印出来的仍是x,y的原值,调用函数没有起到任何作用,或是说程序并没有达到你所想的效果。这就印证了刚才所说的传值是实参的一份拷贝而已! 第二种是传递的参数是指针,请看下面例程: /*该函数实现两个数交换其值*/ #includestdio.h #include stdlib.h int swap(int *x,int *y) { int temp; temp=*x; *x=*y; *y=temp; } int main(void) { int x,y; /*定义两个指针变量指向x与y*/ int *p=x,*q=y; printf(please input the x and y!\n); scanf(%d,%d,x,y); /*注意这里的调用形式,必须加上这个符号*/ swap(x,y); printf(%d,%d\n,x,y); return EXIT_SUCCESS; } 这个程序时对上面程序的改进或者说是纠正,这样x,y才能交换其值。可是你也许会问这时为什么呢?仅仅改变为指针形式就可以吗?是的,让我慢慢道来:这确实是刚才所说的一份拷贝,但现在拷贝的是一份指针,就是指向x,y的指针,但是通过swap函数里的却可以间接访问在主函数里的x,y的值,所以也就可以修改主函数的值了,但这时主函数的指针值确实改变不了的,因为主函数仅仅是传递了一份拷贝,任凭swap函数这么修改这份指针,始终改不了主函数的指针。现在明白了吗? 第三种:传递的是数组名,请看下面的例程: /*该函数实现将某一字符串中的小写改为大写字母,其余的不 变 */ #include stdio.h #include stdlib.h void change(char *string) { int i=0; /*记住这种写法“*(string+i)”*/ while(*(string+i)!=\n) { if(*(string+i)=a*(string+i)=z) *(string+i)-=32; i+=1; } } int main(void) { char string[1000]={Hello,my world!}; change(string); printf(%s\n,string); return EXIT_SUCCESS; } 这种就和上面的第二种情况很类似,传递给change函数的是一个指向字符数组首元素的指针的拷贝,仿佛是通过传址调用的,但实际上和刚才说的,尽管传递的是指针拷贝,但还是能改变主

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档