所有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;
}