为什么可以在chars数组中更改字符,而使用char*则不可能?

use*_*550 2 c++ arrays char

如果我声明一个chars(char str[])数组,我可以更改其中的任何字符.但是,如果我像这样声明那个数组 - char* str="abcd";它不可能改变里面的任何字符.这是为什么?它们不应该是同一个东西吗?

Arm*_*yan 12

声明一个字符数组时

char myarr[5] = "abcd";
Run Code Online (Sandbox Code Playgroud)

这是你的阵容.abcd字母被复制到本地数组中,无论你想要什么,你都可以自由地使用它.c ++中的字符串文字(""中的字符串)属于类型const char[N].您可以存储指向它的指针

const char* p = "abcd"
Run Code Online (Sandbox Code Playgroud)

现在,因为p是const,你不能修改你的字符串文字,这很好.不幸的是,由于历史原因,存在从字符串文字到内容的隐式转换char*

char * p = "abcd"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可能会修改字符串文字,但这样做有未定义的行为.幸运的是,这种转换已被弃用.

请注意,这是字符串文字的一个独特问题,因为它是唯一一种左值的文字类型.所有其他文字都是右值,所以没有修改它们的概念.