“C++ primer” P188
传值调用
实参的值被拷贝给形参时,形参和是实参是两个相互独立的对象。指针形参
实际就是指针拷贝操作,拷贝的是指针的值 ,拷贝后两个指针是不同的指针。
比如:
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没有任何的影响。