函数参数的传递(复制实参的值)

一、非引用传递:

用实参的副本初始化形参,函数没有访问调用所传递的实参本身,修改形参时不会影响到实参的值。

  1、非引用形参(值传递,实参的局部副本):

   普通的非引用类型的参数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数不会方位实参本身,所以不会修改实参的值。

 int gcd(int v1, int v2)

{

  while(v2) {

    int  temp = v2;

            v2 = v1%v2;

             v1 = temp; 

        }

      return v1;

}

该函数仅仅修改了函数内的局部参数。

   2、指针形参:

    形参为指针时,将复制实参指针,调用函数时不会修改指针的值。但如果形参是非const类型的指针,函数可通过指针实现赋值,修改指针所指对象的值。

   void reset(int *ip) //形参为ip

{

           //   *ip = 0;    // changes the value of  the object to which ip points   通过指针修改了指针所指对象的值

    ip = 0;    // changes only the local value of ip ; the arguments is unchanged 修该了形参的值,对实参(ip的指向)没有影响

}

reset函数仅能指向非const对象,即仅能将int *类型的实参传递给reset函数。

void use_ptr(const int *p)

{

}

我们既可以用int *,也可以用const int *类型的实参调用use_ptr函数.

3、const形参

(调用函数时,如果函数使用非引用的非const形参,既可以给函数传递const实参也可传递非const的实参)

  如果将形参定义为非引用的const类型:

   void fcn(const int i )

{

}

则在函数中,不可以改变实参的局部副本

(由于实参仍然是以副本的形式传递,因此传递给fcn的既可以是const对象,也可以是非const对象)

以上为复制实参,传递给形参。

对于大部分的类类型或者大型数组,复制实参的效率太低,而且某些类类型是无法复制的。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值