i++?++i?i=50分

systemlogin 2003-09-13 09:24:44

int i=j=k=3,sum1,sum2,sum3;

sum1=(i++)*(++i);
sum2=(j--)*(--j);
sum3=(k++)*(++k)+(k--)*(--k);

//此程序在TC2.0下结果是sum1=16,sum2=4,sum3=18;小弟的迷惑在sum3,
根据吉林大学某教授讲解:
sum3=(k++)*(++k)+(k--)*(--k);
18 3 4 3 2
(k++)*(++k)与(k--)*(--k)同时运算.
而小弟根据谭浩强的思想,
sum1=(i++)*(++i);
16 4 4
i++与++i的值同为4, 为何在
sum3=(k++)*(++k)+(k--)*(--k);
18 3 4 3 2 中k++与++k的值不同?

此外,在VC6.0中,sum3的结果是25,why?

请教高手们帮忙细心分析一下.
...全文
53 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
glacierrr 2003-12-18
  • 打赏
  • 举报
回复
看来全是一些小混混,不知所以然,又自以为是,悲哀啊!

哈哈,看来你是个大混混,知其所以然了!别人浪费时间来回答你的问题,就得到你这样的感谢!!!!看你的态度要好一点,要这样只能让别人不回答你的问题。

烦死了,看c++ gotchas 陷阱14吧,我就不写陷阱14是什么,你高兴看就看,不高兴看就算了。反正我们都是小混混了。不过我看上面的那些小混混好像水平都不比你差吧。
afreeeagle 2003-12-18
  • 打赏
  • 举报
回复
版主说的不错
systemlogin 2003-12-18
  • 打赏
  • 举报
回复
看来全是一些小混混,不知所以然,又自以为是,悲哀啊!
jiwenn 2003-09-24
  • 打赏
  • 举报
回复
强烈建议不要采用这样的风格。
他的缺点楼上的说得够多了,我也不重复了。
fibbery 2003-09-24
  • 打赏
  • 举报
回复
对于这个问题,我觉得你只要知道x=i++与x=++i的区别就行了。
对于不同的编译器有不同的优化方式,复杂的表达式已经没有什么讨论意义。
在编程中也坚决避免这种复杂的表达式。
RainWindy 2003-09-24
  • 打赏
  • 举报
回复
知道楼主的意思,但是你为什么要知道编译器是怎么工作的呢?是在学习编译原理吗?
这种题目在各个编译上的编译原理都不同,如果需要移植的话,这种错误是根本查不到的。采用这种风格只会给自己找麻烦。就算你弄清楚了原理,说不定下次你使用时又会弄不清楚,或者你使用另外一种编译器,那不是又要去弄明白呢?多此一举。
至于i++与++i的区别:前者是先返回值,i再加1:
a=i++;相当于
a=i;
i=i+1;
后者是先加1,再返回:
a=++i;相当于
i=i+1;
a=i;

我在三个不同编译器下得到的结果,我也不明白,其实也不需要明白:
watcom c++32:20,2,8
bc3.1:16,4,18
VC6.0:16,4,25
请问你明白吗?
cxjddd 2003-09-24
  • 打赏
  • 举报
回复
这个问题实在是问得太多了,版猪能不能特别上节课啊?
sevencat 2003-09-24
  • 打赏
  • 举报
回复
这个世界本来没规定你走路先跨左脚还是先跨右脚
有一天你先跨了右脚,你偏要在那边想为什么这次我要先跨右脚了,
下次你先跨了左脚,你又要想为什么我这次先跨左脚了?
自己想还不够,还要拉着大家一起想。
还要开个中国特色的座谈会来一起想。

R
zhoukun666 2003-09-24
  • 打赏
  • 举报
回复
这类问题谈论毫无疑义!
kulama2004 2003-09-24
  • 打赏
  • 举报
回复
大学里的某些老师总是喜欢举例这样的程序来户农学生
其实他们连最基本的标准都不知道-_-
kulama2004 2003-09-24
  • 打赏
  • 举报
回复
在C++标准中,规定在一个sequence point中,只能对同一个变量写一次。否则,等式值为未定义。
bingfao 2003-09-24
  • 打赏
  • 举报
回复
对于这种问题,只能说你写出这样的代码有什么意义?
Bjame Stroustrup在The C++ Programming Language一书中明白的说:
The order of evaluation of subexpression within an expression is undefined.
所以,这种问题一点意义都没有,
应当在程序中避免这种情况。
wjb9921 2003-09-24
  • 打赏
  • 举报
回复
真麻烦,弄清出了我再来看看
langzi8818 2003-09-23
  • 打赏
  • 举报
回复
没的说,这样的代码怎么行?!移植行不高吧
cnxiaohai 2003-09-23
  • 打赏
  • 举报
回复
++i
i++

这种东西和编译器是有关系得

其实这种题目是洗脑题

只有考试的时候有用
bing_huo 2003-09-23
  • 打赏
  • 举报
回复
干活弄这种代码直接被k死
systemlogin 2003-09-23
  • 打赏
  • 举报
回复
本人是对第三个结果感到茫然,大家不要跑题啊,turbo C是如何编译的?
minghui000 2003-09-17
  • 打赏
  • 举报
回复
UP
sxtigerVC 2003-09-17
  • 打赏
  • 举报
回复
其实不难理解,在谭的书中是这样讲的,先检查整个过程,刚可得出结论:(i++)+(++i),其实就相当于i=4,然后,4+4。
这完全是个编译器的问题。就如当计算i = 3,(++i)+(++i)+(++i) = 16(在VC中)
playboyxp 2003-09-17
  • 打赏
  • 举报
回复
出现这种情况是很正常的
因为编译器的不同
有的编译器是从右到左做的
有的编译器是从左到右的
加载更多回复(21)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧