异或陷阱
【摘要】
一般情况下,交换2个数据,我们有2种写法:
void change1(int *p1,int *p2){ int tmp=*p1; *p1=*p2; *p2=tmp;} void change2(int *p1,int *p2){ *p1^=*p2^=*p1^=*p2;} int main(){ int ...
一般情况下,交换2个数据,我们有2种写法:
-
void change1(int *p1,int *p2)
-
{
-
int tmp=*p1;
-
*p1=*p2;
-
*p2=tmp;
-
}
-
-
void change2(int *p1,int *p2)
-
{
-
*p1^=*p2^=*p1^=*p2;
-
}
-
-
int main()
-
{
-
int a=1,b=2;
-
cout<<"a b"<<endl<<a<<" "<<b<<endl;
-
change1(&a,&b);
-
cout<<a<<" "<<b<<endl;
-
change2(&a,&b);
-
cout<<a<<" "<<b<<endl;
-
return NORMAL_CODE;
-
}
无论是交换指针指向的数据,还是非指针的数据,这2个写法都可以。
但是,这里有个坑。
如果传入的是2个相同的地址:
-
void change1(int *p1,int *p2)
-
{
-
int tmp=*p1;
-
*p1=*p2;
-
*p2=tmp;
-
}
-
-
void change2(int *p1,int *p2)
-
{
-
*p1^=*p2^=*p1^=*p2;
-
}
-
-
int main()
-
{
-
int a=1;
-
cout<<"a b"<<endl<<a<<" "<<a<<endl;
-
change1(&a,&a);
-
cout<<a<<" "<<a<<endl;
-
change2(&a,&a);
-
cout<<a<<" "<<a<<endl;
-
return NORMAL_CODE;
-
}
对于数组,迭代器等,情况也是一样,只要是相同地址,就有异或陷阱。
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/107501046
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)