嵌入式之家

 找回密码
 现在注册

QQ登录

只需一步,快速开始

搜索
热搜: ARM cortex
查看: 1471|回复: 2

参数——传值调用

[复制链接]

该用户从未签到

55

主题

168

帖子

1767

积分

金牌会员

Rank: 6Rank: 6

积分
1767
发表于 2015-12-31 09:50:13 | 显示全部楼层 |阅读模式
       习惯其它语言(特别是Fortran语言)的程序员可能会对C语言的函数参数传递方式感到陌生,在C语言中,所有函数参数都是“通过值”传递的。也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。这与其他语言是不同的,比如Fortran等语言是“通过引用调用”,Pascal则采用Var参数的形式,在这些语言中,被调用函数必须访问原始参数,而不是访问参数的本地副本。
    最主要的区别在于,在C语言中,被调用函数不能直接修改主调函数中变量的值,而只修改其私有的临时副本的值。
    传值调用的利大于弊。在被调用函数中,参数可以看做是便于初始化的局部变量,因此,额外使用的变量更少,这样程序可以更紧凑简洁。例如,下面这个power函数利用了这个性质
    /*  power函数:求底数的n次幂;n>=0;版本2  */
      int power(int base, int n)
      {
           int p;
           for (p = 1; n > 0; --n)
                p = p * base;
           return p;
       }
      其中,参数用作临时变量,并通过随后执行的for循环语句递减,直到其值为0,这样就不需要额外引入变量i.power函数内部对n的任何操作不会影响到调用函数中n的原始参数值。
    必要时,也可以让函数能够修改主调函数中的变量。这种情况下,调用者需要向被调用函数提供待设置值的变量的地址(从技术上角度看,地址就是指向变量的指针),而被调用函数则需要将对应的参数声明为指针类型,并通过它间接访问变量。
    如果是数组参数,情况就有所不同了。当把数组名用作参数时,传递给参数的值是数组起始元素的位置或地址——它并不复制地址元素本身。在被调用函数中,可以通过数组下标访问或修改数组元素的值。
   
回复

使用道具 举报

该用户从未签到

1

主题

50

帖子

222

积分

版主

Rank: 7Rank: 7Rank: 7

积分
222
发表于 2015-12-31 10:24:14 | 显示全部楼层
值传递和地址传递
回复 支持 反对

使用道具 举报

该用户从未签到

33

主题

97

帖子

885

积分

高级会员

Rank: 4

积分
885
发表于 2016-1-6 14:11:21 | 显示全部楼层
讲的很好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 现在注册

本版积分规则

QQ|Archiver|手机版|小黑屋|嵌入式之家 ( 京ICP备14038168号-1 )

GMT+8, 2025-5-2 15:26 , Processed in 0.020193 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表