C语言“++”运算符

来源:互联网 发布:江西省卫生厅网络直报 编辑:程序博客网 时间:2024/06/10 07:55

本文转载自:http://www.cnblogs.com/bigshow/archive/2008/10/27/1320547.html

所有C语言教科书上都讲了“++”这个运算符,放在变量前表示先加1再使用该变量,放在变量后面表示先使用该变量再加1。但是我们真的掌握了这个运算符了吗?如果你答对了下面这两个程序的输出结果,就说明你已经掌握了这个运算符的用法了。

程序1:
#include <stdio.h>

int main()
{
      int x = 1;
      int y;
      y = (x++) + (x++) + (x++);
      printf("y = %d\n", y);

      return 0;
}

程序2:
#include <stdio.h>

int main()
{
      int x = 1;
      int y;
      y = (++x) + (++x) + (++x);
      printf("y = %d\n", y);

      return 0;
}

程序1的输出结果是“y = 3”,程序2的输出结果是“y = 10”,你答对了没?
下面来分析一下这两个程序,看汇编代码是最直观最清晰的方法。

y = (x++) + (x++) + (x++);

汇编代码如下:
# 先计算三个x之和,结果为3
0040102F   mov         eax,dword ptr [ebp-4]
00401032   add         eax,dword ptr [ebp-4]
00401035   add         eax,dword ptr [ebp-4]

# 将3赋值给y,y=3
00401038   mov         dword ptr [ebp-8],eax

# x加1,x=2
0040103B   mov         ecx,dword ptr [ebp-4]
0040103E   add         ecx,1
00401041   mov         dword ptr [ebp-4],ecx

# x加1,x=3
00401044   mov         edx,dword ptr [ebp-4]
00401047   add         edx,1
0040104A   mov         dword ptr [ebp-4],edx

# x加1,x=4
0040104D   mov         eax,dword ptr [ebp-4]
00401050   add         eax,1
00401053   mov         dword ptr [ebp-4],eax

 

y = (++x) + (++x) + (++x);

汇编代码如下:
# x加1,x=2
0040102F   mov         eax,dword ptr [ebp-4]
00401032   add         eax,1
00401035   mov         dword ptr [ebp-4],eax

# x加1,x=3
00401038   mov         ecx,dword ptr [ebp-4]
0040103B   add         ecx,1
0040103E   mov         dword ptr [ebp-4],ecx

# 将两个x相加,结果为6
00401041   mov         edx,dword ptr [ebp-4]
00401044   add         edx,dword ptr [ebp-4]

# x加1,x=4
00401047   mov         eax,dword ptr [ebp-4]
0040104A   add         eax,1
0040104D   mov         dword ptr [ebp-4],eax

# 将6与x相加,结果为10
00401050   add         edx,dword ptr [ebp-4]

# 将10赋值给y,y=10
00401053   mov         dword ptr [ebp-8],edx

     总结一句话:“++”在变量之后,则在该行语句执行完成后才会执行变量加1操作;“++”在变量之前,则按照运算顺序,先加1再执行其他操作。
     经过上面的分析,应该对“++”这个运算符的用法清楚多了吧。那写出下面这几个程序输出结果应该也不成什么问题啦^_^:
程序3:
#include <stdio.h>

int main()
{
      int x = 1;
      int y;
      y = (++x) * (++x) * (++x);
      printf("y = %d\n", y); //y = 36

      return 0;
}

程序4:
#include <stdio.h>

int main()
{
      int x = 1;
      int y;
      y = (x++) * (x++) * (x++);
      printf("y = %d\n", y); //y = 1

      return 0;
}

程序5:
#include <stdio.h>

int main()
{
      int x = 1;
      int y;
      y = (x++) * (++x) * (x++);
      printf("y = %d\n", y); //y = 8

      return 0;
}

程序6:
#include <stdio.h>

int main()
{
      int x = 1;
      int y;
      y = (x++) * (x++) * (++x);
      printf("y = %d\n", y); //y = 2

      return 0;
}

程序7:
#include <stdio.h>

int main()
{
      int x = 1;
      x = (x++) * (x++) * (++x);
      printf("x = %d\n", x); //x = 4

      return 0;
}

程序8:
#include <stdio.h>

int main()
{
      int x = 1;
      x = (x++) * (++x) * (x++);
      printf("x = %d\n", x); //x = 10

      return 0;
}

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 5个月宝宝吃奶少怎么办 26岁的1型糖尿病怎么办 睡前吃得太饱怎么办 胰岛素2小时>300怎么办 血清c肽测定高怎么办 体测蛋白质和骨骼肌偏高怎么办 半个月重了十斤怎么办 月经停了2个月怎么办 在练腹肌中腹痛怎么办 越练肌肉越肥怎么办 喘不过气来 心闷怎么办 被气得喘不过气怎么办 健身完头晕想吐怎么办 吃多了反胃头晕怎么办 合同未约定退货货物积压怎么办 运动内衣把胸压平怎么办 经常穿皮鞋脚臭怎么办 买衣服胸围小了怎么办 内衣下胸围太紧怎么办 穿文胸衣服要开怎么办 运动内衣的拉链老来怎么办 胸罩没干急着穿怎么办 跑步时大腿很痒怎么办 胖大腿内侧磨伤怎么办 内衣围带过松怎么办 内衣底围特别紧怎么办 全棉衣服上的油怎么办 高腰牛仔裤腰大了怎么办 新买衣服太硬怎么办 棉麻的衣服发硬怎么办 新衣服太硬怎么办雪纺 衣服硬的咯人怎么办 脖子上的勒痕怎么办 腿上容易出现勒痕怎么办 身上总有内裤印怎么办 内裤穿出了印怎么办 饮水机热水口不出水怎么办 饮水机热水口出水小怎么办 新饮水机热水口出水小怎么办 白钢水桶中间支撑怎么办 17岁想长高应该怎么办