C语言交换两个变量值不利用额外变量

本文详细解析了C++中算术运算、位运算和指针运算的基本概念,重点阐述了如何利用异或运算实现变量的高效交换,并通过实例代码深入探讨了指针操作的奥秘。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1) 算术运算
就是通过+和-运算来实现。代码如下:
int a,b;
a=10;b=12;
a=b-a;   //a=2;b=12
b=b-a;   //a=2;b=10
a=b+a;   //a=12;b=10

2) 位运算
通过异或运算也能实现变量的交换,这也许是最为神奇的,请看以下代码:
int a=10,b=12;  //a=1010^b=1100;
a=a^b;    //a=0110^b=1100;
b=a^b;    //a=0110^b=1010;
a=a^b;    //a=1100=12;b=1010;

3) 指针运算1

这个有点不符合,毕竟new关键字还是申请了额外的内存,虽然没有申请变量,换汤未换药

int *a,*b;    
a=new int(10);        //给指针赋值
b=new int(20);        //a=0x00030828,b=0x00030840
a=(int*)(b-a);        //a=0x00000006
b=(int*)(b-int(a));   //b=0x00030828
a=(int*)(b+int(a));   //a=0x00030840


4) 指针运算2

这个是本人自己写的,刚好复习指针时想到的

int a = 4;
int b = 5;

*(((char*)&a)+1) = *((char*)&b);
*((char*)&b)=*((char*)&a);
*((char*)&a)=*(((char*)&a)+1);
*(((char*)&a)+1)=0;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上帝De助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值