#include <stdio.h>
int main()
{
const int a = 12;
int *p;
p = &a;
*p = 70;
}
它会起作用吗?
最佳答案
这是“未定义的行为”,意思是根据标准,您无法预测尝试此操作时会发生什么。根据特定的机器、编译器和程序的状态,它可能会做不同的事情。
在这种情况下,最常发生的情况是答案是"is"。变量,无论是否为常量,都只是内存中的一个位置,您可以打破常量规则并简单地覆盖它。 (当然,如果程序的某些其他部分依赖于其 const 数据是常量,这将导致严重的错误!)
但是在某些情况下——最典型的是 const static
数据——编译器可能会将此类变量放在内存的只读区域中。例如,MSVC 通常将 const static int 放在可执行文件的 .text 段中,这意味着如果您尝试写入它,操作系统将抛出保护错误,程序将崩溃。
在编译器和机器的其他一些组合中,可能会发生完全不同的事情。您可以肯定地预测到的一件事是,这种模式会惹恼任何必须阅读您的代码的人。
关于我们可以通过指针改变一个用const定义的对象的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3801557/