c语言 请问这个结果怎样计算出来的

 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
金色潜鸟
2017-12-04 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5709万
展开全部
i=1; 初值。
p 的值来自表达式 (++i) + (++i) + (++i)
前缀 ++, 先增 1,再用于表达式。
(++i) + (++i) + (++i) = ( (++i) + (++i)) + (++i)
第一个 (++i) 让 i 变 2,第二个 (++i) 让 i 变 3,第三个 (++i) 让 i 变 4,
编译时 选 “不优化”,计算前2项相加 用了更新值 3:
( (++i) + (++i)) + (++i) = ((3)+(3))+ (++i) = (6) + (4) = 10.
编译时选优化(无论“存储优化”或“速度优化”),计算前2项相加 用了最最新值 4:
( (++i) + (++i)) + (++i) = ((4)+(4))+(4) = 12。
编译时选优化, 把原计算,分解为几步走:
i=1; i =i+1; i=i+1; i=i+1; p = i + i + i; 得 12。
p = 表达式的值; “不优化”p 得 10, “优化”p 得 12。
编译时优化或不优化 会得不同结果。这是 c/c++ 语言中的 前缀++,--,后缀++,-- 的严重缺点。
自己编程时,要避免 在一句语句中 用 多个 这种运算符。
追问
为什么第一个i是2第二个i是3它们相加不是2+3吗,为什么是3+3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chinaboyzyq
2017-12-04 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:3270万
展开全部
i=1
++i,i=2
++i,i=3
i+i=3+3=6
++i,i=4
6+4=10
追问
为什么前面两i的是3后面的是4
追答
要完成累加必须有两个数,前两个++i算完就先进行累加,再把累加的结果6与后面一个++i的值进行累加,这与编译器相关,现在在多数编译器都是这样,如果前面有两个值了,就把这两值先相加,再把相加的值与下一个值进行累加。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Y冰靥之星
2017-12-03 · TA获得超过226个赞
知道小有建树答主
回答量:117
采纳率:84%
帮助的人:26.1万
展开全部
p=[(++i)+(++i)]+(++i)
 =3+3+4
 =10
 
 自增优先级大于和值
更多追问追答
追问
为什么前面两个要把它括住呢?
追答

编译器就是这么执行的,,++i 先算。

p=(++i)+(++i)+(++i)+(++i)
 =3+3+(++i)+(++i)
 =3+3+4+(++i)
 =3+3+4+5
 =15
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式