为了账号安全,请及时绑定邮箱和手机立即绑定

关于printf函数

关于printf函数

C
奕吉啊 2017-01-05 17:33:16
程序段:i=8,j=10;printf("%d,%d,%d,%d\n",i,j,++i,j++);其结果9,10,9,10. 结果为什么是这样?
查看完整描述

5 回答

已采纳
?
望远

TA贡献1017条经验 获得超1032个赞

printf函数是从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理输出的时候是从栈顶开始的,所以我们看见的结果是从右边开始处理的。

查看完整回答
2 反对 回复 2017-01-06
?
monarchloser

TA贡献1条经验 获得超5个赞

一直以来,++ --语法浪费了太多人的时间。说句实在话,++ -- 在C语言中其实是一个很细节的语法,除了表达简练外,真的没有什么其它的好处了。
由于中国的C语言教程长期以来被谭浩强主宰,而谭又错误的把++ --作为一个C语言重点来教,并增加了一些难点,把本来很简单的语法,搞得复杂无比!

简单的来说,++i 和 i++,在单独使用时,就是 i=i+1。
而 a = ++i,相当于 i=i+1; a = i;
而 a = i++,相当于 a = i; i=i+1;

如果实在搞不明白++ --怎么回事,那也不是什么天塌下来的事。
因为a=++i完全可以写成 i++; a=i。
a=i++完全可以写成 a=i; i++。
而且,这也是一种好的程序风格:++ -- 语句如非特殊需要,请单独一行使用。

查看完整回答
5 反对 回复 2017-01-05
  • 荒小北158
    荒小北158
    前辈厉害了!
  • 奕吉啊
    奕吉啊
    哦哦,谢谢,但是我还想知道这四个值输出的顺序,不然最后那个结果我还是弄不明白。
?
Xyino_Snake

TA贡献31条经验 获得超22个赞

++--的问题可以深入思考。但我已经知道,你现在问的这个问题,答案本身没有答案揭示的结论更重要。我有C语言三剑客。里面有部分针对这一问题做了全面的阐述。大概的意思就是可以思考这个问题,但不能依靠这种特性。因为这种特性经常靠不住。因此,不妨分离出++--,对性能的影响几乎为0。因为编译器有权优化改写你的代码。
查看完整回答
2 反对 回复 2017-01-07
?
奕吉啊

TA贡献18条经验 获得超23个赞

个人认为,给出一段代码而没有一个确定的结果,是一个很可怕的事。

查看完整回答
1 反对 回复 2017-01-06
?
Vibratee

TA贡献1条经验 获得超0个赞

i的值和++i的值不可能同时都是9呀..

查看完整回答
反对 回复 2017-01-05
?
DOUBLE_l

TA贡献45条经验 获得超12个赞

结果是8,10,9,10
查看完整回答
反对 回复 2017-01-05
?
Cxiao

TA贡献6条经验 获得超0个赞

i++ 先取值运算/操作,再自增1 ++i 先自增1,再对自增后的值进行操作
查看完整回答
反对 回复 2017-01-05
?
荒小北158

TA贡献3条经验 获得超0个赞

++i   和  i++    虽然都是自增1    但是运算顺序是有区别的   ++i   先运算后跳到下一个语句   i++则相反    (这样描述可能不是特别的准确)  

 


查看完整回答
反对 回复 2017-01-05
  • 奕吉啊
    奕吉啊
    我是想问结果为什么是那样?
  • 荒小北158
    荒小北158
    对啊!就是因为它的一个小顺序不同 所以才导致它的输出啊 你可以用编译器调试相关代码 调试一下就知道了 我觉得我说得很明白了 自己去动手吧!
  • 5 回答
  • 1 关注
  • 2224 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信