c++问题:指针形参与引用形参

来源:百度知道 编辑:UC知道 时间:2024/05/24 21:34:31
什么时候应使用指针形参?什么时候应使用引用形参?
解释两者的优点和缺点。

高手帮忙说一下?
急啊。。。。。
有点不懂

引用形参灵活性大。编译器会根据情况选择究竟是直接传递实参还是以指针传递。

而且比较致命的一点是const int &a你是可以直接传整型常量的,const int *a你就得但弄个变量了。

比如void foo(const int &a)你是可以foo(1)这么调用的。

当然普通的函数看起来无所谓,但使用模板的情况下就非常必要了。

一般情况下:

1.对于使用传递的值而不打算对该值进行修改的函数:

a.数据对象很小,如果内置数据类型(如int等)则按值传递;
b.如果数据对象是数组,那只能选择指针参数;
c.如果数据对象是较大的结构,则使用const指针或const引用都可以;
d.如果数据对象是类对象,使用const引用。

2.对于需要修改调用函数传入的数据:
a.如果数据对象是内置类型,采用指针传递;
b.数据对象是数组,抱歉,只能选择指针;
c.数据对象是结构,两者都可以;
d.数据对象是类对象,使用引用。

参考一下。

优缺点还用写吗?上面一看就明白了,对于C++而言,引入引用这项特性的主要原因就是类,因此在类对象参数面前,标准方式就是按引用传递。而面对数组这样的数据,引用是没有用的,我们只有指针这一种选择。

我觉得区别不大

指针更倾向于C的编程,引用更倾向于面向对象编程

用起来还真是没什么区别,功能差不多,引用逻辑上简单点。

没那么罗嗦,你只需要认识到:值传递时形参不会改变实参的值,
引用传递时形参可以改变实参的值。
常量引用的方式可以提高函数参数传递的效率,同时又规避了修改实参的副作用。
函数只能有一个返回值,借助引用传递可以实现多个值的返回效果。
顺便提一下,数组在引用传递时必须指定数组下标的大小!
用不用引用是根据你参数传递的需要来定的,绝不依据参数是什么类型或大小。
编译器不会自作主张去选择用引用还是指针进行参数传递,上楼的案例中其实涉及到对临时匿名变量的