关于使用指针修改const变量的困惑

cod*_*dey 6 c pointers const

以下示例在我的理解中增加了混乱.我无法理解如何修改const变量local.请帮我理解一下.

 /* Compile code without optimization option */
 // volatile.c
 #include <stdio.h>
 int main(void)
 {
     const int local = 10;
     int *ptr = (int*) &local;

     printf("Initial value of local : %d \n", local);

     *ptr = 100;

     printf("Modified value of local: %d \n", local);

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

$ gcc volatile.c -o volatile -save-temps

$ ./volatile

本地的初始值:10

修改后的本地值:100

Sha*_*our 6

如果我们查看C99草案标准部分类型限定符4段,它就是未定义的行为,它说:6.7.3

如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为是未定义的.如果尝试通过使用具有非volatile限定类型的左值来引用使用volatile限定类型定义的对象,则行为未定义.115)

所以你对结果没有任何期望,你不应该这样做.

如果我们看第2段,它说:

与限定类型关联的属性仅对作为左值的表达式有意义.114)

和脚注114说:

该实现可以在只读存储区域中放置一个非易失性的const对象.此外,如果从不使用其地址,则实现不需要为这样的对象分配存储.

一般来说,实现不必将const变量设置为只读,但它可能会因为R ..指出将自动变量放在只读存储器中会很困难.