#include <stdio.h>
int main()
{
const int a = 12;
int *p;
p = &a;
*p = 70;
}
它会起作用吗?
这是“未定义的行为”,这意味着根据标准,您无法预测尝试此操作时会发生什么。它可能会根据特定的机器、编译器和程序状态执行不同的操作。
在这种情况下,最常发生的情况是答案是“是”。变量,无论是否为常量,都只是内存中的一个位置,您可以打破常量规则并简单地覆盖它。 (当然,如果程序的其他部分依赖于其常量数据恒定,这将导致严重的错误!)
然而在某些情况下——最典型的是const static
data——编译器可能会将此类变量放入内存的只读区域。例如,MSVC 通常将 const static int 放入可执行文件的 .text 段中,这意味着如果您尝试对其进行写入,操作系统将引发保护错误,并且程序将崩溃。
在编译器和机器的其他组合中,可能会发生完全不同的情况。你的一件事can可以肯定的是,这种模式会惹恼任何必须阅读您的代码的人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)