我无法理解以下问题的答案。 请帮帮我:)。
输出是什么:
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 ...
提前感谢!
答案 0 :(得分:1)
序列点是这里的神奇词。和
ptr->i = Change(&ptr);
是位置。 (通过转让或通过参考通过功能改变ptr的人员)