使用“ if(var = 0 || var == 0)”语句将var更改为1

周瑋傑*_*周瑋傑 0 c c++

int xx = 0;
if(xx = 0 || xx == 0) printf("4"); // if(TRUE||TRUE) then printf("4")
if(xx == 0) printf("5"); //xx been changed to 1??
printf("6\n"); 
Run Code Online (Sandbox Code Playgroud)

我以为输出为456,但输出为46。为什么?

son*_*yao 5

根据运算符优先级operator||具有比更高的优先级operator=,则

if(xx = 0 || xx == 0) 
Run Code Online (Sandbox Code Playgroud)

与...相同

if(xx = (0 || xx == 0))
Run Code Online (Sandbox Code Playgroud)

xx由分配0 || xx == 0; 它是true,然后隐式转换为1并赋值给xx(因为xxint),然后xx对该if条件求值,并隐式转换为boolwith value true;这就是为什么得到输出的原因"4"。既然xx已经分配给1您,那么您就不会得到输出"5"

我想你想要的是

if(xx == 0 || xx == 0)
//    ^^
Run Code Online (Sandbox Code Playgroud)