求解C语言中&&与++;--输出的问题,求指点!
#include <stdio.h>int main()
{
int a=10;
int result;
result =++a>10 && --a<20 ;
printf("\t result=%d,\t a=%d.\n",result,a);
return 0;
}
输出值为result=1, a=10,
++a的值为11大于10,条件成立为 1 && --a的值(先读取++a的值11再自减即a=--(++a)=10),a<20的值条件成立,两边的结果为真说以result=1
a的取值(在&&的条件成立由左到右先自增,后自减所以最后 a=10)
变动一下:(++a<10 && --a<20)
#include <stdio.h>
int main()
{
int a=10;
int result;
result =++a<10 && --a<20 ;
printf("\t result=%d,\t a=%d.\n",result,a);
return 0;
}
输出结果result=0, a=11.
++a的值为11小于10,条件不成立为0 && --a的值(先读取++a的值11再自减即a=--(++a)=10 ,a<20的值条件为真,前面的结果为假,后面的结果被停止执行,所以输出result的结果为0。
a的取值(只读取++a && 前面的值,没有读取--a),个人理解前面被否定,后面的就会被终止执行,所以a的值为11(++a被执行 --a没有被执行)
再变动一下(++a>10 && --a+20<20 )
#include<stdio.h>
int main()
{
int a=10;
int result;
result =a++>10 && --a+20<20 ;
printf("\t result=%d,\t a=%d.\n",result,a);
return 0;
}
输出值为 result=0, a=10.
++a的值为11大于10,条件成立为1 && --a+20的值(先读取++a的值11再自减即a=--(++a)+20=30 ,a<20的值条件为假,前面的值为直,后面的值为假。所以result的结果为0
a的取值(只读取++a=11>10为真,但是后面--a+20<20为假),为什么a的值为10 (a被取值的 先是a++=11,然后再是--(a++)=11-1=10 问题就在这里 &&前面的值为真后面的值为真,后面的值为假,后面的值既然是假的,为什么a的值先是a++然后最后会被--a执行?不是只执行a++的值,后面就终止执行吗?