话不多说,直接看一个程序:
int a=5,b=6;
printf("%d\n",((++a==b--)?++a:b--));(说明:程序段是为了字迹显示清楚,不是所示对应的代码,下同)
输出的结果是什么呢?请看下图:
这个结果是计算机给的,肯定是按照程序执行的。要能弄懂上面的程序里表达式的结果,必须要理解++a和a++这两种形式的区别。
情况一:++a 意味着先计算a=a+1,然后再取a的值。
情况二:a++ 意味着先取a的值,再运算a=a+1。
上面的程序中,++a的a值是6(要先算a=a+1),而b--的b值是6(因为先取值,再计算b=b-1),判断条件成立,所以取后面++a的值,因为要先算a=a+1,再取值,所以此时最后取到的a值为7。
不过要注意的是,以上两种情况也是有成立条件的,如果是遇到了语句结束符号“;”然后再取值的话,则二者是一样的。因为需要把对应行的代码执行完再取值,无论是否先算a=a+1,最后都是算完才进行下一步。
例如:
int a=1;
a++;
printf("%d\n",a);
int a=1;
++a;
printf("%d\n",a);