我对 ANSI 规范所说的关于更改声明的变量const
可以通过其地址合法修改的内容感到困惑。不幸的是,我无权访问 C90 规范,但得到了冲突的指针:
关键字 const 不会将变量变成常量!带有 const 限定符的符号仅表示该符号不能用于赋值。这使得值只能通过该符号读取;它不会阻止通过程序内部(甚至外部)的某些其他方式修改值。它仅对限定指针参数非常有用,以指示此函数不会更改参数指向的数据,但其他函数可能会。(专家 C 编程:Deep C Secrets:Peter van der Linden)
如果尝试通过使用具有非 const 限定类型的左值来修改使用 const 限定类型定义的对象,则行为未定义。如果尝试通过使用具有非 volatile 限定类型的左值来引用使用 volatile 限定类型定义的对象,则行为未定义。( http://flash-gordon.me.uk/ansi.c.txt )
我在 C99 规范 (n1256.pdf) 中看到了后者。
谁能澄清一下以上两种观点中哪一种是正确的?
const
编辑:Expect C Programming 实际上给出了一个示例来演示使用指针更改变量的能力。