点击(此处)折叠或打开
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <math.h>
-
-
int main ( void )
-
{
-
int x = 0 ;
-
int y = 0 ;
-
-
printf("%d\n",++x);
-
printf("%d\n",y++);
-
printf("%d\n",y++);
-
printf("%d\n",y);
-
-
return 0;
- }
cc -o a a.c
我们执行 ./a 得到如下的结果。
1
0
1
2
发现问题了吗?
{BANNED}中国第一个输出: printf("%d\n",++x );
我们得到了逾期的结果 1 。
第二个输出:printf("%d\n",y++ );
我们也得到了逾期的结果 0 。
这是因为 y++ 是先执行了 printf("%d\n",y); 然后再执行了 y= y+1;
也就是说 y++ 是先用 y 作为基础去执行某条指令,然后再增加 1 .
第三个输出:printf("%d\n",y++);
我们也得到了逾期的结果 1。
理由与第二个输出一样。只是说这个时候的 y 的值实际上已经是 1 了。
第四个输出:printf("%d\n",y)
我们同样得到了逾期的结果 2。
理由同样与第二个输出一样,只是这个时候我们的第三个输出执行之后,对 y 进行了 + 1 的操作,所以在第四个输出的时候,y 的值已经是 2 了。
从这个我们会意识到一个问题,很多时候,我们希望输出 y+1 的值,但是我们不希望在下一次需要用到 y 的值的时候,y 的实际值已经发生了改变。
比如:我们希望 y 的值永远是 0 ,但是我们又希望在某个特定的时候打印 y+1 的值。很显然,使用 printf("%d\n",y++); 或者是 printf"%d\n",++y); 是不合适的。
要想满足上述效果,我们可以采取如下的方式来实现。
点击(此处)折叠或打开
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <math.h>
-
-
int main ( void )
-
{
-
int x = 0 ;
-
int y = 0 ;
-
-
printf("%d\n",x+1);
-
printf("%d\n",y);
-
printf("%d\n",y+1);
-
printf("%d\n",y);
-
-
return 0;
- }
1
0
1
0
这个得细细体会了。