我现在要了解的一件事.问题是关于constC中的限定符.在我的程序中,我想要更改用const限定符定义的变量的值.
例如:
int main()
{
const int i=40;
i=50 ; // error
}
Run Code Online (Sandbox Code Playgroud)
但有没有办法在上面的例子中改变i的值.请让我知道.谢谢
在任何具有明确定义的行为的程序中,i都无法修改.
C99§6.7.3("类型限定词")/ 5明确说明:
如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为未定义.
i是使用const限定类型(const int)定义的对象.它是一个不可修改的左值:你不能修改它,因为它是const限定的.修改它的唯一方法是使用强制转换来删除const限定,这将导致程序显示未定义的行为.
首先,你可能不应该这样做.
其次,是的,如果您必须通过获取其地址并参考它,您可以:
const int i = 40;
*(int*)&i = 50;
// i is now 50
Run Code Online (Sandbox Code Playgroud)
第三,请不要这样做.
编辑:正如其他人指出的那样,这表现出未定义的行为.您假设您的编译器将此值存储在可寻址的位置,而不是必须的.(一个常数值可以用它的直接值代替,并且"使用它的地址"并不意味着什么.)你被警告了.