[c语言笔记]关于指针操作中使用异或交换两个变量的值

    前几天写到一个字符串中前后字符交换的程序,使用的是异或,即:

 a = a ^ b;
 b = a ^ b;//(a^b)^b与同一个数b两次异或,不改变a的值
 a = a ^ b;//(a^b)^a,与同一个数a两次异或,不改变b的值

 

希望达到交换的目的,然后用%s格式符输出,结果总是不能完全输出字符,源程序如下:

#include<stdio.h>

//#define solution1 //采用第一种方法

int main()
{
 int lp_c[] = {2};
 int a, b;
 int i;
 printf("%s\n", lp_c);

#ifdef solution1
//第一种方法
 a = lp_c[0];
 b = lp_c[0];
 printf("交换前:lp_c[0] = a = b = %d \n", a);
 a = a ^ b;
 b = a ^ b;//(a^b)^b与同一个数b两次异或,不改变a的值
 a = a ^ b;//(a^b)^a,与同一个数a两次异或,不改变b的值
#else
//第二种方法,!!!错误,对于同一变量没办法通过异或来与自身交换
 printf("交换前:lp_c[0] = %d\n", lp_c[0]);
 lp_c[0] = (lp_c[0]) ^ (lp_c[0]);//lp_c[0] = '0';
 lp_c[0] = (lp_c[0]) ^ (lp_c[0]);
 lp_c[0] = (lp_c[0]) ^ (lp_c[0]);
#endif  
 
 printf("交换后:lp_c[0] = %d\n", lp_c[0]);//输出字符串的ASCII码
   
 return 0;

}

调试了一个晚上,终于找出原因,异或交换式不能用于交换同一个数的,平常不会出现这种情况,但是指针操作时会出现指针指向同一地址的状况。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值