y=(++i)+(++i) 结果很奇怪??

jackey_option 2008-10-28 03:38:29
int i=1;
int j;
j=(++i)+(++i);
cout<<j<<endl;

output:6

请大家解释下?
...全文
187 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackey_option 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kaios 的回复:]
两次++i修改的是同一块内存,所以其实是3+3
[/Quote]

二楼简洁明了,LZ明白了

结贴
littler_winds 2008-10-28
  • 打赏
  • 举报
回复
一看大这样的题目我就没心情仔细读LZ的题.很早之前就已经说明++i/i++不值得细研究,跟编译器有关
pssui 2008-10-28
  • 打赏
  • 举报
回复
二楼说的对,就是修改的同一块内存,所以是3+3
HNLGDXYJS 2008-10-28
  • 打赏
  • 举报
回复
我的编译器输出:10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
坐看昀起 2008-10-28
  • 打赏
  • 举报
回复
初值i=1
先(++i) i=2 ++i=2
再一次(++i)此刻i已为2所以加加后 i=3 ++i=3
原来的第一个(++i)自然也是3

j=(++i)+(++i)=3+3=6
zjw6861982 2008-10-28
  • 打赏
  • 举报
回复
又见月经贴
thorhero 2008-10-28
  • 打赏
  • 举报
回复
不奇怪, 从右到左 先 ++i i变2了,再 ++i i变3了,再执行中间那个 + 号,但是是地址相加,地址就是i的地址 相当于i + i
就得6了.
据说这个是编译器相关,而且实际书写也不规范,考这种题毫无意义,也勿需去研究他
tangxuankai 2008-10-28
  • 打赏
  • 举报
回复
同意2楼的回答
LN526264300 2008-10-28
  • 打赏
  • 举报
回复
++在变量前,要先++再运算,i要进行两次++运算,才进行+运算,自然是6。楼主找本经典C语言书,对++会有详细介绍的
loveapple1 2008-10-28
  • 打赏
  • 举报
回复
貌似是j=(3)+(3);
kaios 2008-10-28
  • 打赏
  • 举报
回复
两次++i修改的是同一块内存,所以其实是3+3
leewenchi 2008-10-28
  • 打赏
  • 举报
回复
看不懂

69,382

社区成员

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

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