我们一行一行分析:
for (x = 5x >0x--) //从x=5开始,当x>0的值为false时停止循环。每次循环后x自减。
if (x-- <5) printf("%d", x)//x--的值就等于x,也就是说第一次是不执行的。这个语句同时也会将x自减。
else printf("%d", x++)//x++的值也等于x,但同时也会将x自增。第一次会执行这个语句,输出为x-1(等于4),因为在判断语句中x自减了。
所以,第一轮输出为4。
第二轮,x因为for循环自减了,此时x-- <5也已满足,又因为在上一轮循环中加1,因此输出4+1-1-1=2;
第三轮与第二轮相似,不同之处在于没有执行printf("%d", x++),因此x的值减2,输出1
根据《C语言规则》①是。j++等价于j=j+1
,
j--相当于j=j-1
所以自加自减语句都是赋值语句。
②int
a=2
/*定义了整型变量a,并赋了初值2*/
((a++)*(a++)*(a++))
/*
假设令t=((a++)*(a++)*(a++)),
则
t=8
*/
因为每一个相乘的因子都使用了一次,所以a在里面都自增了一次。
即:
a=a+3=5