求大神帮解一道C语言




我是C语言的初学者,遇到这道题,我不明白得出的答案,大神能帮解释一下吗,拜托了!

12 个解决方案

#1


这个包含参数传递和++等运算符,而且与编译器相关,所以,楼主不要纠结这种问题的答案

#2


难道置顶帖放着都不看么?

#3


只看到窗帘,没看到人,好黑。

#4


在计算时,遇到x++会记录此时的x的值作为最后的输出结果。遇到x和++x的时候则不会将此时的计算结果作为最终的输出,只会修改x的值,在最终输出的时候都输出x的值。
对于i++的结果,是有ebp寻址函数栈空间来记录中间结果的,在最后给printf压栈的时候,再从栈中把中间结果取出来;而对于++i的结果,则直接压寄存器变量,寄存器经过了所有的自增操作。

在不同的编译器下结果不同

#5


这种问题去看置顶帖
就算看不懂,只要知道不要这么写就可以了

#6


几乎没什么人会这么写,这么写的结果很依赖与编译器,你用DEV的话结果又会不一样.  这就是C/C++ . 很大程度上依赖于编译器厂商. 你要做的就是熟悉一个,了解这种差异
这有关于你的问题的详解.....也就是楼上说的顶置贴.......http://bbs.csdn.net/topics/370153775

#7


又是这种专牛角尖的题。
1.学生被考试害得不轻啊,你要是在面试的时候写这种代码,对不起,走人。
2.教学害得。IT更新多块,什么年代,还在写void main().   --->  int main (void)

解答一下:
这个主要是函数调用时,参数压栈顺序的问题。
函数的值是从右边往左压栈的。所以,副作用从printf(""          ) 的最右边开始。    
printf("   xxxxx",++i    ,    i++,     --i     ,     i++     ,--i,       -i++      ,i--)
                          (7)           (6)      (5)         (4)       (3)        (2)     (1)
先计算(1) 再(2) .。。。。。。
i++  ++i 这类问题的就看书吧。

#8


楼上正解,调用函数的时候,参数从左向右压栈

#9


该回复于2015-08-01 16:23:55被管理员删除

#10


函数参数的求值顺序是没做定义的,所以楼主的那一次编译最后参数先编译,利用了i = 8 的初始值,而后面的都是些随机情况。
LZ请注意,C语言中只有4个运算符规定了求值顺序 (1) 逻辑与 “&&”  (2)逻辑或“ ||” (3)条件运算符 “?:”(4)逗号运算符“ ,”。 除此之外的都没做定义,需要我们适当使用括号或者分开来写。

#11


除了出题,其他情况用不到这种写法

#12


7楼正解。除了一些比较常用的循环以外,基本不用++
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告