C语言剖析— ++操作符
可以先看下面有段代码
int main()
{
int k = 2;
int a = 1;
k = k++ + k++;
printf("k = %d\n", k);
if( a-- && a )
{
printf("a = %d\n", a);
}
return 0;
}
这里运行的答案是(这里使用的编译器是用linux gcc 编译器)
K=6
为什么呢,我们先分析:
k = k++ + k++;
这里有两个k++操作,但是在同一条语句上,这里实际上是先取当前k的值而不是取k++后的值所以这两次++的操作在这条语句上并没有执行,所以此时 k=4;
OK ,来到打印语句 printf(); 这个时候两个++操作开始生效了,此时的k的值会进行两次++操作所以最后打印就是上面的结果.
(PS:上面的过程可以用VS这个IDE进行调试,然后打开汇编就可以了解到这个实际过程)
好了那么可能现在还有一个疑惑:
if( a-- && a )
为什么这个条件判断不成立呢
这里涉及到C语言的顺序点的问题, 顺序点是C语言中变量修改的最后时机
C语言里面 ; && || ? 都是顺序点, 意思是遇到这些符号之前的变量操作就会执行修改保存
OK 知道这些那么 回到问题 上面的 if( a-- && a ) 为什么不执行的问题就很清晰了
因为 if语句中 && 是顺序点 所以前面的 a–会执行自减操作 得到a==0 所以条件不成立
参考自
狄泰 C语言深度解析
转载:https://blog.csdn.net/qq_41161063/article/details/101845977
查看评论