c语言 请问这个结果怎样计算出来的
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
3个回答
展开全部
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++ 语言中的 前缀++,--,后缀++,-- 的严重缺点。
自己编程时,要避免 在一句语句中 用 多个 这种运算符。
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
i=1
++i,i=2
++i,i=3
i+i=3+3=6
++i,i=4
6+4=10
++i,i=2
++i,i=3
i+i=3+3=6
++i,i=4
6+4=10
追问
为什么前面两i的是3后面的是4
追答
要完成累加必须有两个数,前两个++i算完就先进行累加,再把累加的结果6与后面一个++i的值进行累加,这与编译器相关,现在在多数编译器都是这样,如果前面有两个值了,就把这两值先相加,再把相加的值与下一个值进行累加。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询