小编Hre*_*ory的帖子

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

它是安全的代码,还是编译器可以通过 优化访问p,从而*p导致42

#include <stdio.h>

int i = 42;
int *d = &i;

void test(int const *p) 
{
    *d = 43;
    printf("%d, %p\n", *p, (void *) p);
    printf("%d, %p\n", *d, (void *) d);
}

int main() {
    test(d);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我发现*p通常打印为43,但我想知道这里是否有任何陷阱,因此在某些情况下打印*p可能会产生42

c constants compiler-optimization pointer-aliasing

4
推荐指数
1
解决办法
124
查看次数