这个怎么错了??
如图 本帖最后由 haiouda 于 2015-1-23 09:55 编辑出于好奇,把上面的又重打了一遍;这会结要又不一样了,我的电脑它到底是怎么算的呢? 你是要写 q = (++j) + (++j) + (++j) 吧? 小甲鱼 发表于 2015-1-22 00:12
你是要写 q = (++j) + (++j) + (++j) 吧?
是呀 小甲鱼 发表于 2015-1-22 00:12
你是要写 q = (++j) + (++j) + (++j) 吧?
不好意思 ,打错了一个符号{:5_96:} 上面,p=5+6+7=18呀,为啥 是15?
上面,q=6+7+8=21呀,为啥结果是22 ? 其实这也跟编译器的优化有一定的关系:
#include <stdio.h>
int main()
{
int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++);// 这个很容易,是先使用 i 的值,在本语句结束后再进行 ++ 操作
q = (++j) + (++j) + (++j);
/*
这个又是怎么回事呢?
是这样的,相当于:
q = (++j) + ((++j) + (++j))
q = (++j) + (7 + 7)
q = 8 + 14
q = 22
*/
printf("%d, %d", p, q);
return 0;
} 小甲鱼 发表于 2015-1-22 10:39
其实这也跟编译器的优化有一定的关系:
为啥 我就是看不明白呀 {:5_104:}
j 的值是5,第一个(++j)怎么成8了 haiouda 发表于 2015-1-22 00:47
上面,p=5+6+7=18呀,为啥 是15?
上面,q=6+7+8=21呀,为啥结果是22 ?
如果排除,软件问题:
按正常的逻辑,我上面写的结果,是对的。 是这样子的么? haiouda 发表于 2015-1-22 11:16
为啥 我就是看不明白呀
j 的值是5,第一个(++j)怎么成8了
因为 ++j 是先进行 ++ 操作,再使用 j 的值
q = (++j) + ((++j) + (++j))
q = (++j) + (7 + 7)# 此时后边两个 j 的值是 7,前边那个 j 还没参与运算,所以先不管
q = 8 + 14 # 现在参与了,所以在原来 7 的基础上再进行 ++ 操作,得到 8
q = 22 小甲鱼 发表于 2015-1-22 12:29
因为 ++j 是先进行 ++ 操作,再使用 j 的值
小甲鱼老师,辛苦了,终于搞懂了,谢谢了:handshake 小甲鱼 发表于 2015-1-22 12:29
因为 ++j 是先进行 ++ 操作,再使用 j 的值
加了个括号后,结果又不一样了哟 p就是5+5+5啊~
页:
[1]