自增,自减运算符的应用在编译结果中出现的问题

发布时间:2024-05-14 01:42 发布:上海旅游网

问题描述:

下面是我用vc6.0 编译的程序,结果为什么是这样子,请高手们分析一下,谢谢了!

/* 自增,自减运算符的应用*/
#include<stdio.h>
void main()
{
int a=5, b,c ,i=10;
b=a++;
c=++b;
printf("a=%d, b=%d, c=%d\n",a,b,c);
printf("i=%d, i++ = %d, i++= %d\n",i,i++,i++);
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
printf("%d\n",i);
}

a=6,b=6,c=6
i=10,i++=10,i++=10
13
12
12
13
-12
-13
12

为什么第二行的输出会是这样子?
我感觉是i=10, i++=10,i++=11
源程序的第二条输出是这么写的:
printf("i, i++ , i++= %d,%d,%d\n",i,i++,i++);
对应的输出结果是:i, i++ , i++=10,10,10
这样的输出怎么感觉很别扭,那个对应的那个?
我将程序改为了上面的,但结果和我想的不同。

问题解答:

后++的规定是这条语句执行完才执行加操作,所以要等语句完全执行完才加
还有一点,您一定也不清楚,参数是从右向左处理的。

你如果把程序变成汇编码就会明白了
先把i的值放进栈里,然后执行语句,
执行完后再执行i++;i++;

printf("i=%d, i++ = %d, i++= %d\n",i,i++,i++);

不知道怎么说,实际上是在同时的时候,它的空间不会改变
fun(i++,i++)这也是传都是i的值,希望有好的解释,俺也学习一下……

面的

热点新闻