传引用调用形参

   原创作品,转账请注明出处。 


  调用一个函数是,它的实参会替换函数中的形参。也就是说实参会填充形参的位置。有几种机制都可以实现这一过程:

一是传值调用机制,二是用于替换形参的传引用调用机制,下面主要针对传应用调用机制进行简单的阐述。

   1. 区别:

  传值调用机制是将实参中的值传递给函数的形参,并不会将实参这个变量传入;

传引用调用机制是用实参变量本身来替换形参。函数调用中相应的实参必须是一个变量,用于替换形参的将是这个变量。

void getInput(double& fVar)
{
    using namespace std;
    cout<<"I will convert a value from A to B.\n";
    cin>>fVar;
}
在一个包含这个函数的定义的程序中,以下函数调用会将A变量设置从键盘读取值:

getInput(A);
   2. 传引用调用详解:

大多数情况下可以将传引用调用机制想象成:作为函数实参提供的变量名称直接替换掉引用调用形参。实际过程中,要比这种简单说法更加微妙。要是形参成为传引用调用参数,需要在其类型名称之后添加符号&。对应地,在函数调用中,你传递的实参应该是一个变量,而不能是一个常量或者表达式。调用函数时,实参变量(而不是该变量的值)会替换形参。调用函数期间,函数主体中对形参的任何改变,都会作用于实参变量。

程序变量是作为内存地址来实现的,编译器为每个变量都分配一个内存位置。用以下函数声明为例:

<strong><span style="font-size:14px;">void getInput(int& inputNum1, int& inputNum2);</span></strong>
   两个传引用调用形参inputNum1和inputNum2是函数调用中所用的实参占位符。
<strong><span style="font-size:14px;">getInput(firstNum, secondNum);</span></strong>
   执行这个函数调用时,为函数提供的实际并不是实参名称inputNum1和inputNum2,相反,为其提供的是与每个名称关联在一起的内存位置的列表。列如其位置列表是

<strong><span style="font-size:14px;">1000
1014</span></strong>
这是已经分配给实参变量firstNum1和secondNum2的内存位置(注意顺序)。与形参关联的实际是这些内存位置。

<strong><span style="font-size:14px;">firstNum1  ------> 1000 -------> inputNum1
secondNum2 ------> 1004 -------> inputNum2</span></strong>
执行函数主体的语句时,函数主体对形参执行的任何操作实际会作用于形参关联的内存位置。

  

 3. 形参与实参

(1)函数的形参在函数声明中列出,并在函数定义主体中使用。任何形参都是一种空白位置或者占位符,会在函数调用时候被别的东西填充。

(2)实参用于填充形参。学一个函数调用时,实参在函数名之后的圆括号中列出。执行这个函数调用时,实参会在形参的位置“插入”。

(3)“传值调用”和“传引用调用”这两个术语是指“插入”过程中具体采用的一种机制。

在传值调用机制中,只使用实参的值在这种机制中,形参是一个局部变量,它被初始化称想要实参的值。

在传引用调用机制中,实参是一个变量,而且会照搬整个变量。在这种机制中,是参变量会替换形参,故对形参所做的任何更改其实都会作用于实参变量。



         

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值