Chinaunix首页 | 论坛 | 博客
  • 博客访问: 873157
  • 博文数量: 151
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(151)

文章存档

2026年(4)

2025年(10)

2024年(8)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: C/C++

2025-07-08 10:13:51

废话不多说,用一小段代码进行说明:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. int main ( void )
  5. {
  6.         int x = 0 ;
  7.         int y = 0 ;

  8.         printf("%d\n",++x);
  9.         printf("%d\n",y++);
  10.         printf("%d\n",y++);
  11.         printf("%d\n",y);

  12.         return 0;
  13. }


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); 是不合适的。

要想满足上述效果,我们可以采取如下的方式来实现。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. int main ( void )
  5. {
  6.         int x = 0 ;
  7.         int y = 0 ;

  8.         printf("%d\n",x+1);
  9.         printf("%d\n",y);
  10.         printf("%d\n",y+1);
  11.         printf("%d\n",y);

  12.         return 0;
  13. }
这段代码执行得到的结果是:
1
0
1
0

这个得细细体会了。
阅读(18) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~