这段代码的输出是什么

时间:2013-06-04 12:19:55

标签: c

我无法理解以下问题的答案。 请帮帮我:)。

输出是什么:

struct INT
{
    int i;
};

typedef struct INT INT;

int Change(INT** INTptr)
{
    (*INTptr) = (INT*)malloc(sizeof(INT));
    (*INTptr)->i = 1000;
    return 500;
}

int main()
{
    INT dummy = {750};

    INT* ptr = &dummy;

    ptr->i = Change(&ptr);

    printf("dummy.i = %d, ptr->i = %d\n", dummy.i, ptr->i);

    return 0;
}

从我的一个朋友那里得到了这个。

我认为答案是:

dummy.i = 750,ptr-> i = 500

但是当我运行代码(GCC编译器)时,我得到:

dummy.i = 500,ptr-> i = 1000

使用不同的编译器可以成为我的答案吗?

此外,我仍然不明白为什么输出是500和1000 ...

提前感谢!

1 个答案:

答案 0 :(得分:1)

序列点是这里的神奇词。和

ptr->i = Change(&ptr);

是位置。 (通过转让或通过参考通过功能改变ptr的人员)