[求助]这道简单题的答案怎解出来的?
看看这道题
void main()
{ int a=1,b=2,c=3;
printf("%d,%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b=c),a==(b==c));
}
请问答案是怎么做出来的?
----------------解决方案--------------------------------------------------------
从右边开始赋值 先把C赋给B 然后赋给A 所以第一打印出来的应该是3 ,第二个 =的优先级比==的高 .所以先把B赋值给了a 然后a判断是否与 C相等 如果相等 打印出来的是1 不相等就是0 ,...
----------------解决方案--------------------------------------------------------
想问下,一般=的优先级不是比==低吗?为什么这道题=的优先级就比==的高呢?
----------------解决方案--------------------------------------------------------
"=":是右向左运行;
“==”是左向右运行
----------------解决方案--------------------------------------------------------
printf(括号里面表达式的计算顺序是由右到左,计算完成后输出到显示器的顺序为从左到右)
但是题目里面有5个%d却对应了4个表达式,所以最后一个%d的值是不确定的(随机的);
a=b==c 这个表达式的计算顺序是先判断b==c,然后把得到的值赋给a.
----------------解决方案--------------------------------------------------------
谢谢各位的帮助,我明白了,以后多指教
----------------解决方案--------------------------------------------------------
这些知识那里可以找到啊?
----------------解决方案--------------------------------------------------------
3 0 0 0
我觉得应该是这个答案。
----------------解决方案--------------------------------------------------------
3 1 0 0哦
----------------解决方案--------------------------------------------------------
TC2.0环境下输出:3,1,0,0,(随机数);
void main()
{ int a=1,b=2,c=3;
printf("%d,%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b=c),a==(b==c));
}
1. a=b=c:此句为赋值语句,从右向左的,即a=(b=(c=3));
2. a=b==c;此句为先等于,再赋值,即a=(b==c),因为有赏个语句,此时的a=3,b=3,c=3,所以(b==c)为真=1,所以a=1
2. a==(b==c);因为b=3,c=3,所以(b=c)b=3,a=3,而(a==1)为假,所以,值为0;
..
----------------解决方案--------------------------------------------------------