#include<stdio.h>
int main(){
int a[2]={8,7};int min,i;
i=0,min=1;
a[min]^=a[i]^=a[min]^=a[i];//交换变量
//a[i]=a[i]^a[min],a[min]=a[i]^a[min],a[i]=a[i]^a[min];
printf("%d %d ",a[i],a[min]);
}
这个代码输出是7,0
交换变量一行换成下一行的注释句运行结果是7,8;
但是这两个不是等价的么,书上说是等价的;
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
a^=b^=a^=b;
printf("%d %d",a,b);
}
而这里面的交换变量是成功的;
为什么呢?
请把这本书扔掉
你可以看看微软的文档: C 序列点
你的代码行为是未定义的