常指针写入访问权限冲突

#include<iostream>
using namespace std;
int main()
{
	char *const name= "chen";
	cout << name << endl;
	name[3]= 'a';
	cout << name;
}


按照课本上常指针写的,为什么会有写入访问权限异常啊

 

刚去问了下大神,他说单独的字符串是在常量池中的,他的修改是由系统完成的,你先定义a[]="123",再让name = a,相当于向系统去申请修改,然后系统进行修改。如果直接指向字符串,相当于权限越级,你的修改无效

const修饰符:保证数据可读不可写,你前面已经定义了name指针指向字符串"chen",那么后面对该指针任何的修改都会报错

name只是一个指针, 没有分配对应的内存空间.    chen这个字符串在常量区,  

const去掉 , 用C语言应该可以, 但是不合法, 

自我感觉不知道怎么用语言描述,你可思考一下下面的程序

#include<iostream>
using namespace std;
int main()
{
    char p[] = "chen";
    char a[] = "abc";
    char *const name = p;
    name[2] = 'a';
    //name = a;报错 
    cout << name << endl;
    cout << name[0];
}

对比一下这个

#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
    char *const name = (char *)malloc(sizeof(char) * 4);
    name[0] = 'a';
    name[1] = 'b';
    name[2] = '\0';
    //name = "abc";报错 
    cout << name << endl;
    cout << name[0];
}