C++调用函数时的两种传递方式“传值方式调用”和“引用方式调用”有何不同?

 我来答
做他
2008-01-06 · TA获得超过501个赞
知道小有建树答主
回答量:325
采纳率:100%
帮助的人:229万
展开全部
引用是直接使用.不引用就是 复制一个给定参数的版本,然后用克隆版进行操作.
引用与否有以下两个重要区别:
1.引用效率比非引用高.考虑关于string类型的某函数some(string &x);
这个是引用,函数内部直接使用x本身进行操作,而如果是非引用,函数内部生成一个临时的string,这个临时的string 和x 一样.然后对临时的string进行操作.显然,生成一个小的string 不需要花太多时间,但是当string非常大的时候,引用和非引用的区别就明显了,而且当参数扩展到对象的时候就更明显,有的对象非常之大使得非引用方式效率无法忍受.

2.引用可以修改参数本身而非引用则不可以.正如上一点所述,引用直接对参数进行操作,因而函数内部对引用参数的任何修改都会在函数外体现.举例子,考虑如下函数:
void setx(int &x)
{
x=3;
}
假设有int t=4;执行setx(t) 后,t=3;如果去掉引用符号,则setx(t)后t的结果是不变的.
这一点可以使得引用可以作为函数返回的一种手段,比如考虑计算x*3的void函数:
void int x3(int x,int &sum)
{
sum=x*3;
}
在调用之前sum是什么值无关紧要,重要的是调用后sum的值就是x*3的值,这正是我们想要的结果.
但是这一点在有些情况下是我们不想看到的,比如有一个数据规模巨大无比的对象我们要调用它但是我们不想调用函数修改它.如果是非引用,这不成问题--记住非引用函数不会改变参数--然而这个巨大的对象对于非引用的调用来说效率实在低下.c++提供const 关键字 对我们的矛盾 给出了一个不错的解决方案.
考虑以下函数:
void setx(const int &x)
{
x=4;
}
编译失败.以const声明的参数x 是无法在函数内部被修改的.

当然,不用const也可以,只要你确定你的代码不修改"不希望修改的参数"的值就行,然而人毕竟是人,代码多了程序长了难免会有疏漏,所以我们用计算机提醒我们.这就是我们使用计算机的初衷之一...

.....over

参考资料: http://zhidao.baidu.com/question/42746056.html

SooInLee
推荐于2016-05-13
知道答主
回答量:23
采纳率:0%
帮助的人:0
展开全部
值传递就是把变量的值赋给一个临时变量,在对参数的调用过程使用的是这个临时变量,对临时变量的任何操作不影响原变量的值
引用传递好比是给变量起了一个别名,实际对引用参数的调用就是对原变量的调用,操作会影响到这个变量的值,这个跟C里面的地址传递类似
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhu_x_m
2008-01-06 · 超过19用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:33.4万
展开全部
传值方式调用是传植,而引用方式调用是传址,和指针方式调用相同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式