c语言 请问这个结果怎样计算出来的
发布网友
发布时间:2023-09-27 05:34
我来回答
共3个回答
热心网友
时间:2024-08-26 01:28
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
热心网友
时间:2024-08-26 01:28
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的值进行累加,这与编译器相关,现在在多数编译器都是这样,如果前面有两个值了,就把这两值先相加,再把相加的值与下一个值进行累加。
热心网友
时间:2024-08-26 01:29
p=[(++i)+(++i)]+(++i)
=3+3+4
=10
自增优先级大于和值