调用函数时传指针注意问题

指针是C/C++的强大工具,但也是最容易出错的地方。

C++在函数调用时支持三种方式:赋值传递,引用传递,指针传递。

1.赋值传递是在函数调用栈内创建临时对象,并将实参对象复制到临时对象,函数内部只能操作实参对象的副本。这种方式对于基本类型倒无所谓,但是对于庞大的类对象,则会带来很大的调用代价。

2.引用传递是通过实参对象的别名来引用实参对象,并不将实参对象进行拷贝,函数内部可以直接操作实参对象,因此它的优点是高效,适合传递大型对象,同时这种方式也可以用作从函数返回数据的方式,它的缺点就是实参对象要在函数调用之前就必须存在。

3.指针传递本质上也是赋值传递,指针变量的大小固定,因此也比较适合传递大型对象,当然也可以用作从函数中返回数据。同时,初学者容易犯的错误来了,比如想要用以下函数获取对象指针:

1 void getMethod(Method* p_method)
2 {
3   p_method = new Method();
4 }

但是函数只是操作了实参对象的副本,我们真正想改变的实参对象并未修改,因此真正的方法是:

1  void getMethod(Method** pp_method)
2  {
3    *pp_method = new Method();
4  }
原文地址:https://www.cnblogs.com/guoxiaoqian/p/3939708.html