C-关于使用指针修改const变量的混乱



以下示例在我的理解中增加了混乱。我无法理解如何修改const变量本地。请帮助我了解同样的事情。

 /* 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;
}

$ gcc volatile.c -o挥发性–save -temps

$ ./volatile

本地的初始值:10

本地的修改值:100

如果我们查看C99草案标准部分6.7.3 type type feolifiers 段落 4 它说:

如果尝试通过使用使用constemifif的类型来修改对象 具有非统一类型的LVALUE的行为是不确定的。如果尝试是 通过使用LVALUE来指代用挥发性合格类型定义的对象 对于非易失性合格类型,该行为是不确定的。 115)

,因此您对结果没有任何期望,也不应该这样做。

如果我们查看段 2 它说:

与合格类型相关的属性仅对表达式有意义 是lvalues。 114)

和脚注114说:

实现可能将const对象放置在一个不易挥发性的const对象中 贮存。此外,如果无法使用该对象,则实现不必为该对象分配存储。

通常,实现不必制作 const 变量读取,但它可能但可以在R ..指出的是将自动变量放置在只读的内存中很难。

最新更新