使用指针修改 const 变量
int main (void)
{
const int foo_readonly = 10;
int *foo_ptr;
foo_ptr = (int *)&foo_readonly; /* (1) This casts away the const qualifier */
*foo_ptr = 20; /* This is undefined behavior */
return 0;
}
引用 ISO / IEC 9899:201x ,第 6.7.3 节§2:
如果尝试通过使用具有非 const 限定类型的左值来修改使用 const 限定类型定义的对象,则行为未定义。 […]
(1) 在海湾合作委员会中,这可以发出以下警告:warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]