char a[20] = "2131";
为什么可以,是因为运行的时候就已经分配了栈空间,并且给该空间赋值为"2131";
a = "12313";
至于为什么不能再次赋值是因为虽然a相当于指针,但a并不是指针,它所指向的地址并不不能修改,只能修改给定空间的值
你可以修改
a[0] = 'a';
a[1] = 'b';
想要修改整个空间的值可用strcpy()
char* p = "1123";
p = "131231";
为什么可以因为p为指针类型,可以指向任何地址
不过需要注意p所指向的地址可以随意更改,但是p所指向的地址的值是不可以修改的
*(p+1)= 'a';
是不可行的,因为p所指向的为字符串常量区,是不可修改的
当然下面是没有问题的,因为a所指向的为栈空间,所以可以修改
char a[10] = "qweqwe";
char* p=a;
*(p+1) = 'a';
至于为什么
string a = "123121";
a = "3123123";
可以是因为string类会重载运算符,内部还是用类似strcpy来实现的。
为什么可以,是因为运行的时候就已经分配了栈空间,并且给该空间赋值为"2131";
a = "12313";
至于为什么不能再次赋值是因为虽然a相当于指针,但a并不是指针,它所指向的地址并不不能修改,只能修改给定空间的值
你可以修改
a[0] = 'a';
a[1] = 'b';
想要修改整个空间的值可用strcpy()
char* p = "1123";
p = "131231";
为什么可以因为p为指针类型,可以指向任何地址
不过需要注意p所指向的地址可以随意更改,但是p所指向的地址的值是不可以修改的
*(p+1)= 'a';
是不可行的,因为p所指向的为字符串常量区,是不可修改的
当然下面是没有问题的,因为a所指向的为栈空间,所以可以修改
char a[10] = "qweqwe";
char* p=a;
*(p+1) = 'a';
至于为什么
string a = "123121";
a = "3123123";
可以是因为string类会重载运算符,内部还是用类似strcpy来实现的。