今天考试的一道题目
main()
{static int a;
(a==0)&&(a=-1)&&(a=2) ;
printf("%d",a);
}
a都没有赋值,a==0是怎么算的啊,结果居然是2?????????????
今天考试的一道题目
main()
{static int a;
(a==0)&&(a=-1)&&(a=2) ;
printf("%d",a);
}
a都没有赋值,a==0是怎么算的啊,结果居然是2?????????????
静态变量未初始化,在系统中会自动初始化为0的,在a==0时是成立的,因此后面的a=-1是会执行的,同是此表达式非零,后面的a=2也会执行,整体的逻辑表达式非零也为真。而此时a的值已经变成2了
因为2赋值了给a
a==0……为真
a-=-1……a=-1,不是零,也为真
然后a=2也为真。这个表达式算完了,执行到a=2了,所以a=2
如果中间的语句换为a,那么就不执行最后的一个
呵呵,看看中间和最后一个括号,里面的是赋值运算符而不是逻辑判定符
static int a; (a==0)&&(a=-1)&&(a=2)
&&表示与操作即前后表达式都为真则整个表达式为真
他的操作运算方法是先检测前面的如果为真则检查后面的。如果前面的为假则跳过后面的表达式直接判定整个为假
看你的例题:
static int a; (a==0)&&(a=-1)&&(a=2)
a==0因为a刚定义系统初始值为0所以表达式为真。做a=-1 这个是一个赋值语句在做真假判断的时候赋值语句为真此时判定整体为真其中a的值为-1,系统继续做a=2同样这也是个赋值语句此时判断真假为真。所以整体 (a==0)&&(a=-1)&&(a=2) 为真而a得值为最后赋值的数既是2