通过非常量指针修改 const
在 C 中,const 变量一旦初始化就无法修改。但是,在某些情况下,const 变量可能会被更改。考虑以下代码:
const int e = 2;
int* w = (int*)&e; // (1)
*w = 5; // (2)
cout 如果运行此代码,您会注意到意外行为:
5
2
即使在(2)中*w被改为5,e仍然保持其原始值2。这种看似矛盾的行为源于以下因素:
- (1 ) 取消引用常量指针 (w) 允许进行修改。
- (2) 修改后的值存储在 w 指向的内存位置,在本例中是存储 e 的内存位置。
- 但是,编译器优化了代码,将 e 视为编译时常量,而不是在运行时对其求值。
因此,当*w 在运行时计算,它返回修改后的值 (5)。但是,当在编译时计算 e 时,将使用其原始值 (2)。
此行为在 C 中称为未定义行为。直接或间接修改const变量会导致不可预测的后果,在这种情况下应谨慎行事。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3