c语言自增自减问题?

#include <stdio.h>
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,i++,i++ = %d,%d,%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--);
getchar();
}
第八行,就是printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++);这里为什么结果不是10,10,11,而是10,10,10,中间那一个i++已经加了一次了,后面那个就是先用再加,输出的结果也应该是前面一个自增之后的数值啊!难道是要这个函数printf全部用完它们才开始加的?

i++ 表示 这个表达式结束后进行自加
但是在函数里面或者关键字里面的时候 是等函数或者关键字里面的内容结束后再自加的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-12
yun, 又是这类问题。 不要去研究了,没有任何意义,这属于 C 标准里 undefined behavior,在同一个表达式内,同时修改和读取同一个变量,其结果是 undefined behavior。

也就是说,不同的编译器或者平台,可能得到的结果是不一样的,没有任何道理可言。 你应该做的是消除代码中可能导致 undefined behavior 的内容,而不是问为什么,因为没人知道为什么。
第2个回答  2013-08-12
在一个函数调用里写多个参数,其中有的参数是有副作用的表达式,那么其行为不确定,既与编译器有关,又与编译优化有关。
如果是做题的话,一般认为函数参数是从右往左传的,先算右边的i++,再算左边的,结果是12,11,10。(实际测试受编译优化影响,往往得不到这个答案)
第3个回答  2013-08-12
你说对了,在输出语句(流,如std::cout<<i<<i++<<i++)中,变量值的更新是在执行完之后。
第4个回答  2013-08-12
这种情况结果不明确。最好别这样用。
第5个回答  2013-08-12
本来就是啊!10,10,10.因为它们都是先用后加的,都是同一个printf输出,用的是同一个变量i。执行完这句之后i的值才是11!

c语言的自增自减问题
第四步:处理“++i” 先自增1,然后8进入缓冲区,i=8.缓冲区:8878 3、输出缓冲区数据(栈规则):8878 另外自增、自减、还可能和编译器有关系。

C语言自加自减的问题
n = (++x)+(++x);从右至左,先算++x,x=4,这里x在寄存器里的值是4,再算++x,x=5。注意,关键点来了,那这时候,n是等于4+5吗,不是的。在进行加法时,A+B,寄存器会在得到A,B的值以后才会开始加法计算,现在,A,B的地址都指向X,当最后x=5时,实际上把A的值也做了改变,变成了...

C语言计算题,关于自加自减运算符计算的问题?
等于9 流程:自增、自减符先进行运算,但是由于前三个都是后缀,所以在执行玩改该行后才进行,所以先是2+2+2+(++i) ; 然后由于前缀的自增符(++i), 所以最后一个i变成3,最后变成 2+2+2+3 = 9;但是在执行该行后前三个自增、自减符进行运算,所以i(3)-->i(4)-->i...

c语言关于自增自减运算的问题
你看这个代码。先求的p结果是14 , 按我们算应该是13,但编译器是在编译过程中认为()里面的优先级的相同的,而且都是先自增,所以编译器就把先把这两个自增计算了,然后就是7+7了。而下面是一样的,前二个也是同时进行。后面才进行也就是7+7+8,最后为22. (我以前也问过,老师用编译...

c语言程序问题??自加与自减
一个整数自身加一可以这样写:a+=1;它等价于a=a+1;。但是在C语言中还有一种更简单的写法,就是a++;或者++a;。这种写法叫做自加或自增;意思很明确,就是自身加一。相应的,也有a--和--a,叫做自减,表示自身减一。++和--分别称为自增和自减运算符。自增和自减的示例:include <stdio.h>...

C语言中自增自减的运算问题
表达式++n现将n的值递增1,然后再使用变量n的值,而表达式n++则是先使用变量n的值,然后再将n的值递增1.(函数调用顺序为从右到左)--i先将i的值递减1,8-1=7,现在i=7。在一个--i,7-1=6。此时i=6,然后是++i,6+1=7。此时i=7,在++i,7+1=8,i=8。所以是8767 ...

C语言里关于自增自减运算符的问题
首先是前两个7 因为i++是先赋值在进行加一运算,++i是先加一然后再进行赋值操作,所以a,b中储存着值是7,此时i的值是8 然后是后面两个7,同理 a为7,b为7,此时i为6 同理,-i++中因为++在后面 所以先输出-6,然后在把i加一 这是i变成了7 最后 根据输出格式 输出了 i=7;...

C语言计算题,关于自加自减运算符计算的问题?
自增、自减符先进行运算,但是由于前三个都是后缀,所以在执行玩改该行后才进行,所以先是2+2+2+(++i);然后由于前缀的自增符(++i),所以最后一个i变成3,最后变成 2+2+2+3 = 9;但是在执行该行后前三个自增、自减符进行运算,所以i(3)-->i(4)-->i(5)最后 -->i(4)

C语言自增自减?
在表达式里,像题目这种++,--。在变量前面就是先自增自减再取变量值。在变量后面先取变量值再自增自减。比如:j=i++;意思就是先取i的值赋值给j,以后i再自增。后面代码也是这个意思。你可用这个思路跟着代码走一遍。

C语言自加自减问题~~~
3、后自增运算符(i++)先使用i,再加1,***注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的,(VC++6.0比较变态)所以:printf("%d,%d,%d,%d,\\n",i++,++i,i,i++);从右往左运算:i++得到2(i=2,后加1在整条语句执行完才进行,这里先记下)i还是2 ...

相似回答