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;
}
请问第一个第一函数错在哪里啊?为什么第一个通不过调试而第二个可以啊!!求解!! 展开
{
int temp;
temp=&a;
&a=&b;
&b=temp;
}
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
请问第一个第一函数错在哪里啊?为什么第一个通不过调试而第二个可以啊!!求解!! 展开
4个回答
展开全部
你可以看看C++书里面关于“引用”的介绍,所谓引用,类似传址,不同之处是做了个副本,然后把副本的地址传入。
也就是说,形参声明时,a和b都是int 的引用类型,而你使用的时候也应该按照int的使用方法,而不是如第一个函数。
第二个函数完全正确所以能够通过编译。
第一个函数因为a和b都是整形,而&a和&b是指针,你把一个整形作左值,指针作右值
temp = &a;
这个赋值语句不能通过编译,所以出错;
其次,
&a = &b,指针常量的&a不能作左值,常量都不可以。
&b = temp也是同理。
也就是说,形参声明时,a和b都是int 的引用类型,而你使用的时候也应该按照int的使用方法,而不是如第一个函数。
第二个函数完全正确所以能够通过编译。
第一个函数因为a和b都是整形,而&a和&b是指针,你把一个整形作左值,指针作右值
temp = &a;
这个赋值语句不能通过编译,所以出错;
其次,
&a = &b,指针常量的&a不能作左值,常量都不可以。
&b = temp也是同理。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将temp声明修改为 int *temp;
把指针赋值给int好像不行,也不符合你本意。
把指针赋值给int好像不行,也不符合你本意。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你传进去的数据已经用了引用了
你在函数体里面再引用一次 肯定不对的!
你在函数体里面再引用一次 肯定不对的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询