#include <stdio.h>
void main()
{
int i=1,j=2,k=3;
printf("%d,%d,%d,%d\n",i=j=k,i=j==k,i==(j=k),i==(j==k));
}
在VC中运行结果为什么回事3 1 0 0
#include <stdio.h>
void main()
{
int i=1,j=2,k=3;
printf("%d,%d,%d,%d\n",i=j=k,i=j==k,i==(j=k),i==(j==k));
}
在VC中运行结果为什么回事3 1 0 0
i=j=k是赋值语句:先将k赋值给j,再赋值给i
i=j==k是赋值加判断语句:先将j赋值给i,再判断i是否与k相等,相等则是1,不等则是0
下面的也是差不多的道理……
1、i=j=k 连续赋值,此时 k=3,所以i,j,k最后为3,输出i 为3
2、i=j==k, i=(j==k) 此时,j=k=3, 因此j==k为真(true)所以为1
3、i == (j=k),右侧j赋值为3,i此时为0,因此不等于3,输出为假(false),整数为0,因此输出0
4、i ==(j==k),右侧j=k=3,因此为1,但此时i=0因此i==1不成立,因此输出假(false),整数为0
最后结果,3 1 0 0
因为前面的赋值是正确的,然后后面的判断等式不成立,所以显示默认的false,而VC中不像JAVA中是用true跟false来表示,而是用1跟0来表示,明白了么?