系统如何知道被访问的地址是否恒定

Abl*_*ose 3 c pointers const

使用指针写入常量变量会产生运行时错误.

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一个?

bar*_*nos 5

严格地说,根据C语言标准,您的代码会产生未定义的行为.

实际上,链接器可能已将变量放在i可执行映像的RO部分中.

因此,写操作*p = 10导致存储器访问冲突(也称为分段错误).