有什么方法可以改变用c中的const限定符定义的变量中的值?

jac*_*ack -2 c

我现在要了解的一件事.问题是关于constC中的限定符.在我的程序中,我想要更改用const限定符定义的变量的值.

例如:

int main()
{
const int i=40;
i=50 ;  // error
}
Run Code Online (Sandbox Code Playgroud)

但有没有办法在上面的例子中改变i的值.请让我知道.谢谢

Jam*_*lis 7

在任何具有明确定义的行为的程序中,i都无法修改.

C99§6.7.3("类型限定词")/ 5明确说明:

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

i是使用const限定类型(const int)定义的对象.它是一个不可修改的左值:你不能修改它,因为它是const限定的.修改它的唯一方法是使用强制转换来删除const限定,这将导致程序显示未定义的行为.


yan*_*yan 5

首先,你可能应该这样做.

其次,是的,如果您必须通过获取其地址并参考它,您可以:

const int i = 40;
*(int*)&i = 50;
// i is now 50
Run Code Online (Sandbox Code Playgroud)

第三,请不要这样做.

编辑:正如其他人指出的那样,这表现出未定义的行为.您假设您的编译器将此值存储在可寻址的位置,而不是必须的.(一个常数值可以用它的直接值代替,并且"使用它的地址"并不意味着什么.)你被警告了.

  • 任何执行此操作的程序都会显示未定义的行为 (4认同)