C - 通过别名非常量指针修改const

ref*_*fox 1 c const compiler-optimization

是否允许在标准C中使用别名来修改int给定的函数?换句话说,以下代码是否保证在标准C中始终返回42和1?const int *int *

#include <stdio.h>

void foo(const int *a, int *b)
{
    printf("%d\n", *a);
    *b = 1;
    printf("%d\n", *a);
}

int main(void)
{
    int a = 42;
    foo(&a, &a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Isk*_*rak 5

在您的示例代码中,您有一个整数.你接受一个const指针,以及一个指向它的非const指针.当然,通过非const指针修改整数是合法且明确的.

由于两个指针都是指向整数的指针,并且const指针不需要指向const对象,因此编译器应该期望从const指针读取的值可能已更改,并且需要重新加载该值.

请注意,如果您使用了restrict关键字,则不会出现这种情况,因为它指定指针参数不会对任何其他指针参数进行别名,因此编译器可以优化重新加载.