C++ 形参和实参

1. 传值调用机制 ( call- by-value machanism )

      (1). 在形参位置插入的是实参的值。如果实参是变量,则插入的只是变量的值,而非变量本身。

      (2). 传值调用形参是局部变量。调用函数时,该函数的形参被初始化为实参的值。

 

2. 传引用调用机制

      (1). 替换形参的是实参的内存位置。由于程序变量是作为内存位置来实现的,所以这些内存位置就是变量。也就是说在形参位置插入的是变量本身,而不是变量的值。

      (2). 传引用调用形参是被实参的内存位置替换,故若函数体内对该内存位置有所修改,该变量也会改变。

 

3. 数组形参和数组实参

      函数可将整个数组作为参数。作为形参的整个数组既不是一个传值调用参数,也不是一个传引用调用参数。它是一种新的形参类型,称为数组形参 ( array parameter ) 。数组形参虽然不是一个真正的传引用参数,但它的表现形式与传引用调用参数极为相似。

     数组实参是用于替换数组形参的实际参数值。函数主体内对形参发生改变,数组实参也会相应地改变。这与传引用调用一样。那么区别是什么呢?首先我们必须了解数组的组成:

             数组是作为一个连续的内存块来存储的。计算机只会记住数组索引为 0 的内存地址,也就是数组的首地址。要访问其他索引值的数组成员,计算机是根据数组首地址来计算其他成员的地址的。例如,声明一个数组 int array [10]; 计算机只会记住 array [0] 的地址, 再根据 array [0] 的地址来计算得到 array [7]的内存位置。因此,可以说数组是由3部分组成的:

      • 第一个索引变量的内存位置(数组首地址)
      • 数组基类型(决定了每个索引变量的内存大小)
      • 数组长度(索引变量的数目)

      数组作为实参传给函数时,实际用于替换的是数组的首地址(索引为 0 的数组成员的内存位置),并不是整个数组变量(包含所有数组成员)的内存位置。由于数组本身不能告诉函数自己的长度,故通常需要另一个 int 类型的参数来给出数组的长度。

      总结:传引用调用机制,传递给形参的是整个实参变量的内存位置,而整个数组作为函数参数时,替换数组形参的只是数组实参的首地址。这就是区别。共同点是若函数体内对参数进行了更改,实参也会相应的改变。

     再罗嗦一下,函数体内对任意数组索引成员的更改都是有效的,因为传给函数的是数组首地址,计算机根据首地址找到的也是其他索引成员的内存位置,也就是该索引成员本身。

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

HuaHuaXia

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值