如果我声明一个字符数组 (char str[]
),我可以更改其中的任何字符。
但是,如果我像这样声明该数组 - char* str="abcd";
就不可能更改其中的任何字符。
这是为什么?他们不应该是同一件事吗?
最佳答案
当你声明一个字符数组时
char myarr[5] = "abcd";
这是您的数组。 abcd 字母被复制到您的本地数组中,您可以随意使用它。 c++ 中的字符串文字(“”中的字符串)是 const char[N]
类型。您可以存储指向它的指针
const char* p = "abcd"
现在,因为 p 是常量,你不能修改你的字符串文字,这很好。不幸的是,由于历史原因,存在从字符串文字到 char*
char * p = "abcd"
在这种情况下,不幸的是您可以修改字符串文字,但是这样做会产生未定义的行为。幸运的是,这种转换已被弃用。
请注意,这是字符串文字的一个独特问题,因为它是唯一一种左值文字。所有其他文字都是右值,因此没有修改它们的概念。
关于c++ - 为什么可以更改 chars 数组中的字符,而使用 char * 则不可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15569795/