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

标签 c++ arrays char

如果我声明一个字符数组 (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/

相关文章:

python - X Y 坐标的 Numpy 数组到 Pandas 数据框

c++ - 如何使用 C++ 按字母顺序对 3 个字符串变量进行排序?

c++ - 充满垃圾的单字符 C 风格字符串

c++ - 传递给函数错误的 vector 迭代器

c++ - 写入文件在 Qt5/Qml 中不起作用

c++ - 将数字转换为单词

c++ - 如何构建用于交叉编译的 Qt 5.7.0?

java - 构建一副牌的最有效方法(ArrayList、数组等)?

c - 如何在C中初始化char **?

objective-c - 如何在不实际更改的情况下重新排列 char* 的开头和结尾(索引方式)?