值传递和引用传递

“C++ primer” P188

  1. 传值调用
    实参的值被拷贝给形参时,形参和是实参是两个相互独立的对象。

  2. 指针形参
    实际就是指针拷贝操作,拷贝的是指针的值 ,拷贝后两个指针是不同的指针。
    比如:

int n=0,i=45;
int *p = &n, *q = &i;
*p = 42; //实际改变的是n的值,p的地址未变
p = q;  p的地址变了,现在指向i,但是n的值没有再改变

void reset(int *ip)
{
*ip = 0;//只改变指针所指的对象
ip = 0;//只改变了ip的局部拷贝,外面的实参ip没有变化
}
int i=42;
reset(&i);
cout <<"i = " << i <<endl;  //i的值变为0,但是i的地址没有变化
3.百度面试
 class Myclass {
public:
     string name;
};

void copy(Myclass *o1, Myclass *o2)
{         
     o2 = o1;
}

int main()
{
     Myclass *o1 = new Myclass();    

     Myclass *o2 = NULL;

     copy(&o1,&o2);    

     cout << o2->name << endl;

     return 0;
}

o1,o2作为实参传入copy,实际产生的是o1,o2的拷贝对象,而函数内部修改对外部的o1,o2没有任何的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值