const char *name="chen";
保存"chen"这个字符串的空间叫常量区,是不可以修改的,所以name[3]='a'; 是不允许的
还有, name是个const指针,所以即使name指向一个可以修改的区域,也不能通过name修改指向的区域
还有一点,看你的提问,你还把const修饰的对象搞错了
const char * name="xxxx"; //const修饰的*name, 也就是说name指向的东西不能变
char * const name="xxxx"; //这个const修饰的才是name,也就是name不能变
举个例子:
const char *name="chen";
char* const name1 = "chen";
char st[] = "chen";
char *p = "chen";
name[3] = 'n'; //编译期错误,这个是双重错误
name = st; //ok
name[3] = 'n'; //编译期错误,不允许通过一个const指针修改对象
name1 = st; //编译期错误,name1是个const,不能变
st[3] = 'n'; //ok
p[3] = 'n'; //运行期错误,p指向常量区,不允许修改
p = st; //ok
p[3] = 'n'; //ok
还有就是双const:
const char* const name3="xxxx"; //指针本身和它所指向的对象都不能变
楼主的问题中,已经明确了name所指的区域不能更改,这是由const char *name确定的,这是对的。
但是,为name赋值的字符串常量"chen",它是存储在文字常量区(程序运行过程中不允许被修改------所以A选项是“犯了这条错”),程序结束后由系统释放。