|
|
发表于 2006-8-19 11:39:35
|
显示全部楼层
char str[] = "ROOT"
char *srt = "ROOT";
这来两个的存放方式不一样
第一个是把字符串存放在一段数组内存,也就是放在可读写的内存str数组
第二个是指针,只是指向一个地址,指针本身只是存放一个地址.
你可能要问第二个的字符串存放在哪里?答案是存放在一个只读内存里的"字符串表”.C语言专门把常量的字符串存放在这个表里。第二个指针只是指向这个表的"root"一项。所以不能修改
如何标志只读,是关于CPU的一项功能。可以把不同的内存段分出等级和权限,只读等等。这是CPU保护模式的一个功能。是一个内存里固定格式的描述束缚决定的,CPU来执行。
这个没有语法错误,GCC不会报错。一般是调试的时候发现问题
如果要进一步看,请察看数据段描述符的TYPE字段(存储段描述符的第6个字节,0~3位),当1位(W位)=0的时候表示只读。。。当然,这只是x86的保护措施 |
|