C++ void函数

voidswap(int&a,int&b){inttemp;temp=&a;&a=&b;&b=temp;}voidswap(int&a,int&b){inttemp;te... void swap(int &a,int &b)
{
int temp;
temp=&a;
&a=&b;
&b=temp;
}

void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
请问第一个第一函数错在哪里啊?为什么第一个通不过调试而第二个可以啊!!求解!!
展开
 我来答
我没有车和房
2010-08-18
知道答主
回答量:27
采纳率:0%
帮助的人:0
展开全部
void swap(int &a,int &b),参数中的& 代表“引用”,不是不是取地址,说白了,参数中的a、b还是普通变量。第一个函数内部,temp是个普通变量,不是指针,而函数内部的&a,其实是取地址,标识指针,一个指针是无法赋给一个变量的

希望对你有帮助
百度网友53678dd22
推荐于2016-06-07 · TA获得超过2228个赞
知道小有建树答主
回答量:1329
采纳率:0%
帮助的人:875万
展开全部
你可以看看C++书里面关于“引用”的介绍,所谓引用,类似传址,不同之处是做了个副本,然后把副本的地址传入。
也就是说,形参声明时,a和b都是int 的引用类型,而你使用的时候也应该按照int的使用方法,而不是如第一个函数。
第二个函数完全正确所以能够通过编译。
第一个函数因为a和b都是整形,而&a和&b是指针,你把一个整形作左值,指针作右值
temp = &a;
这个赋值语句不能通过编译,所以出错;

其次,
&a = &b,指针常量的&a不能作左值,常量都不可以。
&b = temp也是同理。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bnujwch
2010-08-18 · TA获得超过1432个赞
知道小有建树答主
回答量:697
采纳率:100%
帮助的人:608万
展开全部
将temp声明修改为 int *temp;
把指针赋值给int好像不行,也不符合你本意。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蜜长青
2010-08-18 · TA获得超过1801个赞
知道小有建树答主
回答量:1849
采纳率:0%
帮助的人:1435万
展开全部
你传进去的数据已经用了引用了

你在函数体里面再引用一次 肯定不对的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式