XOR交换输出预测

2 c swap xor

#include <stdio.h>

void fun(char a[]){

  a[0]^=a[1]^=a[0]^=a[1];

}

int main(int argc, char **argv){

  char b[10];
  b[0]='h';
  b[1]='j';
  fun(b);
  printf("%c",b[0]);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题.它应该交换b[0],b[1]但它不交换.

MBy*_*ByD 11

未定义行为a[0]^=a[1]^=a[0]^=a[1];.评估和分配顺序未定义.

  • +1 C99 6.5/2:"在上一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算修改一次.此外,只能访问先前值以确定要存储的值" (2认同)