-4

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

输出是什么:

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...

提前致谢!

4

1 回答 1

1

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

ptr->i = Change(&ptr);

是位置。(谁将更改 ptr?通过分配或通过引用调用的函数)

于 2013-06-04T12:29:16.437 回答