RT,程式如下:
#include<stdio.h>
int main(void)
{
int a=1,b=2;
int *p1,*p2;
p1=&a,p2=&b;
printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);
*p1^=*p2^=*p1^=*p2;
printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);
return 0;
}
輸出結果為:
a=1,b=2,*p1=1,*p2=2
a=0,b=1,*p1=0,*p2=1
再使用異或運算后*p1和*p2的值并未成功交換,*p1的值變成了0,有大佬解釋一下為什么嗎
uj5u.com熱心網友回復:
#include<stdio.h>
int main(void)
{
int a=1,b=2;
int *p1,*p2;
p1=&a,p2=&b;
printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);
#if 0
printf("No.1: %d\n", (*p1 ^= *p2));
printf("%d\n", *p1);
printf("No.2: %d\n", (*p2 ^= *p1));
printf("%d\n", *p2);
printf("No.2: %d\n", (*p1 ^= *p2));
printf("%d\n", *p1);
#else
*p1^=*p2^=*p1^=*p2;
#endif
printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);
return 0;
}
供參考~
if和else都是一樣的,else部分的分解版本就是if 0的執行部分;
執行結果:
a=1,b=2,*p1=1,*p2=2
a=2,b=1,*p1=2,*p2=1
uj5u.com熱心網友回復:
我運行了你的代碼,結果沒變,和原來的一樣。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278596.html
標籤:C語言
上一篇:有沒有大哥幫忙看一下這個怎么解決 用的是visual studio2019 一直提示資料丟失然后無法例外初始化?
