《C程序设计语言(第2版新版)典藏版》 —1.8 参数—传值调用

举报
华章计算机 发表于 2019/12/06 19:07:02 2019/12/06
【摘要】 本节书摘来自华章计算机《C程序设计语言(第2版新版)典藏版》一书中第1章,第1.8节,作者是[美]布莱恩W. 克尼汉 (Brian W. Kernighan) 丹尼斯M. 里奇 (Dennis M. Ritchie),徐宝文 李志译 尤晋元 审校。

1.8   参数—传值调用

习惯其他语言(特别是Fortran语言)的程序员可能会对C语言的函数参数传递方式感到陌生。在C语言中,所有函数参数都是“通过值”传递的。也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。这与其他某些语言是不同的,比如,Fortran等语言是“通过引用调用”,Pascal则采用var参数的方式,在这些语言中,被调用的函数必须访问原始参数,而不是访问参数的本地副本。

最主要的区别在于,在C语言中,被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。

传值调用的利大于弊。在被调用函数中,参数可以看作是便于初始化的局部变量,因此额外使用的变量更少,这样程序可以更紧凑、简洁。例如,下面的这个power函数利用了这一性质:

image.png

其中,参数n用作临时变量,并通过随后执行的for循环语句递减,直到其值为0,这样就不需要额外引入变量i。power函数内部对n的任何操作不会影响到调用函数中n的原始参数值。

必要时,也可以让函数能够修改主调函数中的变量。这种情况下,调用者需要向被调用函数提供待设置值的变量的地址(从技术角度看,地址就是指向变量的指针),而被调用函数则需要将对应的参数声明为指针类型,并通过它间接访问变量。我们将在第5章中讨论指针。

如果是数组参数,情况就有所不同了。当把数组名用作参数时,传递给函数的值是数组起始元素的位置或地址—它并不复制数组元素本身。在被调用函数中,可以通过数组下标访问或修改数组元素的值。这是下一节将要讨论的问题。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。