小编hel*_*ell的帖子

赋值和指针,未定义的行为?

int func(int **a)
{
    *a = NULL;
    return 1234;
}

int main()
{
    int x = 0, *ptr = &x;
    *ptr = func(&ptr);      // <-???
    printf("%d\n", x);      // print '1234'
    printf("%p\n", ptr);    // print 'nil'

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一个未定义行为的例子还是与序列点有关?为什么行:

*ptr = func(&ptr);
Run Code Online (Sandbox Code Playgroud)

表现不像:

*NULL = 1234;
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提到我用gcc 4.7获得输出'1234'和'nil'.

c pointers variable-assignment undefined-behavior

8
推荐指数
3
解决办法
387
查看次数