使用指针写入常量变量会产生运行时错误.
const int i;
int *p;
void main()
{
p = (int*)&i;
*p = 10; // Causes runtime error
}
Run Code Online (Sandbox Code Playgroud)
但是在Windows系统中,一切都是从RAM本身运行的.
当我打印const变量和普通变量的地址时,我可以看到它们处于不同的偏移量.
系统如何知道指针访问的地址是const一个?
严格地说,根据C语言标准,您的代码会产生未定义的行为.
实际上,链接器可能已将变量放在i可执行映像的RO部分中.
因此,写操作*p = 10导致存储器访问冲突(也称为分段错误).