黑马程序员技术交流社区

标题: 关于i++和++i的问题 求大神 啊 [打印本页]

作者: llo    时间: 2015-7-12 17:12
标题: 关于i++和++i的问题 求大神 啊
  1. #include <stdio.h>
  2. int main()
  3. {
  4.       int i=8;     
  5.       printf("++i的值=%d \n++i的值=%d \n--i的值=%d \ni--的值=%d\n",++i,++i,--i,i--);
  6.       return 0;
  7. }
复制代码
为什么输出的结果是 9 8 7 8不理解啊  能详细点????????
作者: αメ炫    时间: 2015-7-12 17:39
xcode 运行结果是9 10 9 9
作者: llo    时间: 2015-7-12 17:42
αメ炫 发表于 2015-7-12 17:39
xcode 运行结果是9 10 9 9

我用c++软件编译的是我发的结果 啊
作者: αメ炫    时间: 2015-7-12 17:51
llo 发表于 2015-7-12 17:42
我用c++软件编译的是我发的结果 啊

不同系统、编译器等在处理i=++i+++++i++;都会存在一些差异,你这个地方如果是事实的话,有可能是逗号表达式的运算顺序的差异导致的

xcode 参数列表是从左向右的,你的可能是从右向左计算的

作者: llo    时间: 2015-7-12 17:54
αメ炫 发表于 2015-7-12 17:51
不同系统、编译器等在处理i=++i+++++i++;都会存在一些差异,你这个地方如果是事实的话,有可能是逗号表达 ...

从右往左应该是  8 7 6 8  啊
作者: likang    时间: 2015-7-12 18:03
#include <stdio.h> int main() {int i=8;        printf("%d\n",++i);  printf("%d\n",++i);  printf("%d\n",--i);   printf("%d\n",i--);  }这样在vc环境中运行的结果是 9,10,9 ,9
作者: lixianzhu0712    时间: 2015-7-12 18:23
不知道!!
作者: 李博文    时间: 2015-7-12 19:27
VC6从右向左开始解析。。。   - -vc6是98年的工具 bug太多了。。。现在的编译器都是从左到右开始解析

希望可以帮到你
作者: llo    时间: 2015-7-12 20:32
李博文 发表于 2015-7-12 19:27
VC6从右向左开始解析。。。   - -vc6是98年的工具 bug太多了。。。现在的编译器都是从左到右开始解析

{:5_ ...

嗯,,谢了
作者: 午夜码农    时间: 2015-7-12 20:36
好吧,如果你用eclipse工具编辑的话,值还不一样。。
作者: 倾语燕    时间: 2015-7-13 00:08
9,10.9,9新版Xcode的运行结果
作者: 闪电侠    时间: 2015-7-13 00:15
应该是9 10 9 9
你的结果就有问题。。。
:o
作者: norwood    时间: 2015-7-13 07:21
什么鬼啊
作者: 294250051    时间: 2015-7-13 10:10
= = 亲娘来,楼上咋学的。别误导楼主了。
我来给你解释。
#include <stdio.h>
int main()
{
    int i=8;
    int j=8;
    int p=8;
    int q=8;
    printf("++i的值=%d \nj++的值=%d \n--p的值=%d \nq--的值=%d\n",++i,j++,--p,q--);
    return 0;
}
这样就是你要的结果了。
你都用变量i,变量i不断变化,后面的结果肯定不是预想的啊。

作者: WPeng    时间: 2015-7-13 10:50
9,10,9,9.应该是这个结果
作者: carshoel    时间: 2015-7-13 10:56
太不严密了,同一个代码,应该同一个结果啊
作者: 舟舟    时间: 2015-7-13 12:19
9 10 9 9啊
作者: walterwang    时间: 2015-7-13 13:45
根据谭浩强编的那本书,应该是9,10,9,9。但是不同的编译器,说不定有什么奇葩的bug呢
作者: dushoupeng    时间: 2015-7-13 15:12
编译器不同的结果吧
作者: pacio    时间: 2015-7-13 18:46
好多人都不建议用自增自减的,真正做开发的时候用的估计也不多,应尽量避免
作者: 我丶就这样    时间: 2015-7-13 18:58
围观学习!
作者: chensc    时间: 2015-7-13 19:11
学习学习!
作者: noway190    时间: 2015-7-13 19:37
来过。。。。。。。。。。。。。。。。
作者: llo    时间: 2015-7-13 22:23
午夜码农 发表于 2015-7-12 20:36
好吧,如果你用eclipse工具编辑的话,值还不一样。。

不会吧  这和编译器有关系???
作者: llo    时间: 2015-7-13 22:25
carshoel 发表于 2015-7-13 10:56
太不严密了,同一个代码,应该同一个结果啊

问题 是  他的结果就是不一样 啊
作者: llo    时间: 2015-7-13 22:27
pacio 发表于 2015-7-13 18:46
好多人都不建议用自增自减的,真正做开发的时候用的估计也不多,应尽量避免 ...

只是看着这个题的时候看答案比较纠结啊
作者: llo    时间: 2015-7-13 22:29
294250051 发表于 2015-7-13 10:10
= = 亲娘来,楼上咋学的。别误导楼主了。
我来给你解释。
#include

是的  这样写的结果是那样 但是和题目中的意思感觉就不一样了啊
作者: 慕名黑马生    时间: 2015-7-13 23:04
第一个++i你应该明白,执行第二个++i时i原值已经加1变为9,所以输出 为10,后面同样获取的i值都是前一个语句执行后的值,毕。
作者: llo    时间: 2015-7-14 21:35
慕名黑马生 发表于 2015-7-13 23:04
第一个++i你应该明白,执行第二个++i时i原值已经加1变为9,所以输出 为10,后面同样获取的i值都是前一个语 ...

理解.......................
作者: 18678927239    时间: 2015-7-14 21:38
一楼是正确答案
作者: huguozhang    时间: 2015-7-15 00:54
学习~~~~~~~~~~~
作者: zlc    时间: 2015-7-15 09:45
这个结果不对吧,第一次++i,i的值变为9,表达式的值是9;第二次++i:i的值变为10,表达式的值是10;第三次--i,i的值变为9,表达式的值是9;第四次i--,表达式的值是9,i变为8             所以结果应该是9 10 9 9
作者: 294250051    时间: 2015-7-15 17:14
llo 发表于 2015-7-13 22:29
是的  这样写的结果是那样 但是和题目中的意思感觉就不一样了啊

我就给你解释一下为什么错了,我并没有去做这个题。
显然那些版本不对有bug的不明白究竟为何错了。
建议去学学怎么用debug,找错很方便。你现在程序短,找错还好找,一旦长了,必须用debug
作者: llo    时间: 2015-7-15 21:55
294250051 发表于 2015-7-15 17:14
我就给你解释一下为什么错了,我并没有去做这个题。
显然那些版本不对有bug的不明白究竟为何错了。
建议 ...

恩  谢了
作者: hanjiaqi    时间: 2015-7-15 21:57
原来还和编译器有关系 涨姿势了
作者: Mal    时间: 2015-7-15 21:58
9 10 9 9 新版Xcode运行结果

作者: 王鹏亮    时间: 2015-7-23 00:13
不同系统、编译器等在处理i=++i+++++i++;都会存在一些差异,你这个地方如果是事实的话,有可能是逗号表达式的运算顺序的差异导致的
作者: 562413895@qq.co    时间: 2015-7-23 08:44
怎么也不能是9,8,7,8啊,应该是9,10,9,9才对啊,要么就是9,9,9,9
作者: GodLovenan    时间: 2015-7-23 11:56
不应该是 9  10 9  9吗?
作者: 爱生活爱程序    时间: 2015-7-23 12:08
++i,直接得到的是i+1的值,i++是先取得i的值,然后i加1.
作者: 后街男孩    时间: 2015-7-23 13:10
294250051 发表于 2015-7-13 10:10
= = 亲娘来,楼上咋学的。别误导楼主了。
我来给你解释。
#include

你这样是不是故意避开了问题 假如说给你出这样的题 你认为输出的结果是多少?
作者: alanwangke213    时间: 2015-7-23 14:30
不需要太纠结这些问题。i++与++i有些编译器处理方式确实不一样,不需要太多研究,代码都是需要带上编译环境来说的,比如我基础测试里面的题目
int  a = 5;
int b = (++a) + (a++);
输出a,b的值,不同编译器就会产生不同答案了。我用Ubuntu和CentOS都是7和13.但是用VS2010就是7和12
作者: alanwangke213    时间: 2015-7-23 14:35
不需要太纠结这些问题。i++与++i有些编译器处理方式确实不一样,不需要太多研究,代码都是需要带上编译环境来说的,比如我基础测试里面的题目  int  a = 5; int b = (++a) + (a++); 输出a,b的值,不同编译器就会产生不同答案了。我用Ubuntu和CentOS 都是7和13,但是用VS2010就是7和12。所以带上编译器和系统才有讨论价值
作者: wy911011    时间: 2015-7-23 14:38
++i的值=9
++i的值=10
--i的值=9
i--的值=9
作者: liusuizuoyou    时间: 2015-7-23 17:47
++ /--  在前 先自增或自减后,再执行当前操作
++ /--  在后 先执行当前操作,然后再自自增或自减

作者: 294250051    时间: 2015-7-23 18:30
后街男孩 发表于 2015-7-23 13:10
你这样是不是故意避开了问题 假如说给你出这样的题 你认为输出的结果是多少? ...

我怎么避开了?我明明告诉他 ,为什么他运行的结果和他理想的结果不一样的原因,是因为前面用了i,后面接着用i,造成后面结果的不准确。然后前面几楼全部都说运行结果和理想结果不一样的原因是版本问题,你看清楚问题再说话好么? 真不懂你怎么考虑的,我是在解释这个问题怎么出错了,而不是去做这道题。如果你让我去做这道题的话,楼主已经做对了,因为题目就不是按他的想法来出的题。如果是按他的想法出的题,那他还写帖子问别人干什么?如果你能仔细的看楼主的问题和我写的答案,你就知道我形容的到底是什么意思了。不要在这种问题上纠结过多时间,一点收益没有的。
作者: Mal    时间: 2015-7-23 18:43
运行结果9 10 9 9
作者: 杨远鹏    时间: 2015-7-23 19:13
我好像知道了些什么

作者: 刘彦麟    时间: 2015-7-23 19:25
9    首先i=8,++i,在原文中代表i+1=9后再输出,所以是输出9,而此时i=9;
10  接着还是++i,在原文中代表i+1=10后再输出,所以是输出10,而此时i=10;
9    然后是--i,在原文中代表i-1=9后再输出,所以是输出9,而此时i=9;
9    最后是i--,这一步在原文中的意思是先输出i的值,i再自检,所以输出9,而经过输出之后,i=8;
如有错误希望各位大神指导··谢谢··
作者: 就是赚个黑马币    时间: 2016-4-20 23:45
现阶段 我的学的C 里在xcode中  我是这样记的  ++在前就是先加在用,在后就是先用在加,--同理
作者: 就是赚个黑马币    时间: 2016-4-20 23:46
现阶段 我的学的C 里在xcode中  我是这样记的  ++在前就是先加在用,在后就是先用在加,--同理
作者: king、小白    时间: 2016-4-21 00:03
结果是  9 10 9 9
作者: wuqi    时间: 2016-4-24 23:03
4楼正解  今天老师讲了  不同编译器会出现顺序不同的情况
作者: Latinno    时间: 2016-4-24 23:21
++i:先自加,然后再返回值。

i++:先返回值,然后再自加。

貌似是这么回事,然而你代码全部写成++i能输出出这样的结果。。。我觉得你的电脑编程软件还蛮幽默。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2