奇怪的运行结果。。。大家运行试试,分析分析

weiyiabout 2007-06-12 11:22:33
#include <iostream>
using namespace std;
int main()
{
int i = 1,k = 0,n = 100;
do
{
k = k + 10 * i;
i = i++;
}while(i != n);
return 0;
}
...全文
345 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwh_0 2007-06-13
  • 打赏
  • 举报
回复
i = i++;在java中和c++中结果是不一样的,
int i = 1;
i = i++;
java中i=1
c++中i=2
PEPSI_COLA 2007-06-13
  • 打赏
  • 举报
回复
i = i++;后增量操作的结果是增量之前的变量值。
执行i++的后增量操作之后,再次引用i的时候变量i的值为2,但用i++的表达式对i进行重新赋值时,表达式的值为增量操作之前的初值1,即再次将变量i的值赋值为1,所以是个死循环。
i = ++i;前增量操作的结果和变量值是一致的。
执行i++的后增量操作之后,再次引用i的时候变量i的值为2,再用++i的表达式对i进行重新赋值时,表达式的值为2与变量的值保持一致即用变量本身的值对自己赋值,所以能自增
weiyiabout 2007-06-12
  • 打赏
  • 举报
回复
从结果上看是这样分析的,
//i“先”的到赋值过来的 i,此时i = 1,“然后”i++得到2
这不改变了运算符的的优先运算顺序了吗?这觉得奇怪
BEYOND_Q 2007-06-12
  • 打赏
  • 举报
回复
我把过程写给你看吧.
1. i = 1;//->do{}//进入循环
2. i = i++;
//在这里 i = 1 -> i = 2 ;//i先的到赋值过来的 i,此时i = 1,然后i++得到2
3.while(i!=n) //这里i = 2 了,然后下一次循环.
测试结果也是这样.呵呵
taodm 2007-06-12
  • 打赏
  • 举报
回复
i = i++;是C++标准上用来说明有关++运算符的未定义行为的例子。
不同的编译器会有不同的结果。
weiyiabout 2007-06-12
  • 打赏
  • 举报
回复
但程序运行的结果表明不是死循环。。。。
zywsz 2007-06-12
  • 打赏
  • 举报
回复
i = i++;
死循环,直接++i;就可以了
uzone 2007-06-12
  • 打赏
  • 举报
回复
无聊。。。。
weiyiabout 2007-06-12
  • 打赏
  • 举报
回复
k= (10 + 990)*99/2 = 49500
-------------------
什么意思?
weiyiabout 2007-06-12
  • 打赏
  • 举报
回复
那个i = i++;是怎么回事啊?i++之后,i变成了2,i++的表达式还是1,但之后i = i++;i又变成了1,之后判断i 和 n 的关系,i总是1,我觉得应该是个死循环才是
csdn5211 2007-06-12
  • 打赏
  • 举报
回复
k= (10 + 990)*99/2 = 49500
todototry 2007-06-12
  • 打赏
  • 举报
回复
嘛意思,呵呵^_^,okokok
csdn5211 2007-06-12
  • 打赏
  • 举报
回复
怎么啦,有什么问题?
  • 打赏
  • 举报
回复
那里奇怪了?
endofhero 2007-06-12
  • 打赏
  • 举报
回复
没问题吧?i=i++
首先在右边取变化前的i给左边,开始时i=1 就是 i=i ,其中右边i=1
然后右边i 自增,这时如果打印i 就变成2了
以后类推
taodm 2007-06-12
  • 打赏
  • 举报
回复
摘自C++ 98标准
5 Expressions
....
4 Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual
expressions, and the order in which side effects take place, is unspecified.53) Between the previous
and next sequence point a scalar object shall have its stored value modified at most once by the evaluation
of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.
The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full
expression; otherwise the behavior is undefined. [Example:
i = v[i++]; // the behavior is unspecified
i = 7, i++, i++; // i becomes 9
i = ++i + 1; // the behavior is unspecified
i = i + 1; // the value of i is incremented
—end example]
chenyu2202863 2007-06-12
  • 打赏
  • 举报
回复
i++的意思就是这个表达式是i,然后把i自加1

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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