C语言字符是左值 为什么可修改

#include
using namespace std;

int main()
{
char c[6] = "hello";

c = "s"; //为什么c是不可被修改的左值
c[2] = 's'; //而c中的元素都可以被修改?

return 0;

}

数组名是常量型指针,即 const ,当然不能修改;这个与 const 型常量是一样的,定义了就不能修改。

c 中的元素,是编译器在堆栈上分配的一块内存,当然可以修改。如果你定义 char *p = "hello",则 这 指向一常量区的字符串。你可以试试去修改,如 p[2] 的值看看。结果当然是不能修改。

因为 c 虽然可以当作普通的 char* 指针用,但是它指向的是一个固定的数组,这个指针不可以更改。
本身就是数组,数组成员当然可以赋值了。
你的理解有问题,普通的
char* d;
d = "s"; //这是赋予d一个指向常量字符串的指针,并不是把字符串内容复制到d指向的内存。
同样
c = "s";//这是指针赋值而不是内容复制,由于c其实是 const char* 的,指针赋值不起作用。

c是常量型指针,不可修改;但其内容允许修改。