haiouda 发表于 2015-1-21 23:56:30

这个怎么错了??

如图

haiouda 发表于 2015-1-23 09:52:28

本帖最后由 haiouda 于 2015-1-23 09:55 编辑

出于好奇,把上面的又重打了一遍;这会结要又不一样了,我的电脑它到底是怎么算的呢?

小甲鱼 发表于 2015-1-22 00:12:35

你是要写 q = (++j) + (++j) + (++j) 吧?

haiouda 发表于 2015-1-22 00:37:25

小甲鱼 发表于 2015-1-22 00:12
你是要写 q = (++j) + (++j) + (++j) 吧?

是呀

haiouda 发表于 2015-1-22 00:38:06

小甲鱼 发表于 2015-1-22 00:12
你是要写 q = (++j) + (++j) + (++j) 吧?

不好意思 ,打错了一个符号{:5_96:}

haiouda 发表于 2015-1-22 00:47:18

上面,p=5+6+7=18呀,为啥 是15?
上面,q=6+7+8=21呀,为啥结果是22 ?

小甲鱼 发表于 2015-1-22 10:39:04

其实这也跟编译器的优化有一定的关系:

#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;
}

haiouda 发表于 2015-1-22 11:16:32

小甲鱼 发表于 2015-1-22 10:39
其实这也跟编译器的优化有一定的关系:

为啥 我就是看不明白呀 {:5_104:}

j 的值是5,第一个(++j)怎么成8了

haiouda 发表于 2015-1-22 11:22:38

haiouda 发表于 2015-1-22 00:47
上面,p=5+6+7=18呀,为啥 是15?
上面,q=6+7+8=21呀,为啥结果是22 ?

如果排除,软件问题:
按正常的逻辑,我上面写的结果,是对的。 是这样子的么?

小甲鱼 发表于 2015-1-22 12:29:38

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

haiouda 发表于 2015-1-22 15:41:42

小甲鱼 发表于 2015-1-22 12:29
因为 ++j 是先进行 ++ 操作,再使用 j 的值

小甲鱼老师,辛苦了,终于搞懂了,谢谢了:handshake

haiouda 发表于 2015-1-23 09:56:20

小甲鱼 发表于 2015-1-22 12:29
因为 ++j 是先进行 ++ 操作,再使用 j 的值

加了个括号后,结果又不一样了哟

爱琴海里的星 发表于 2015-1-23 16:36:20

p就是5+5+5啊~
页: [1]
查看完整版本: 这个怎么错了??