如果试图修改声明为 const
的对象,const
类型限定符会导致编译器发出错误消息,但这还不够保护。例如以下程序修改声明为 const
的数组的两个元素:
#include <stdio.h>
int main(void)
{
const char buf[2] = { 'a','b' };
const char *const ptr = buf;
unsigned long addr = (unsigned long)ptr;
*(char *)addr = 'c';
addr = addr + 1;
*(char *)addr = 'd';
printf("%c\n", buf[0]);
printf("%c\n", buf[1]);
return 0;
}
所以,事实证明是编译器没有足够的保护来保护对象不被修改。我们怎样才能防止这种事情发生呢?
最佳答案
我认为不能也不应该提供更多保护。
C 编程语言几乎可以让您自由地做任何您想做的事情,尤其是从指针访问对象。然而,自由从来都不是免费的,因此 C 程序员必须始终小心(如果没有必要,请避免转换)。
关于c - 有没有办法(实际上)保护对象不被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574791/