我知道这个问题可能已经被问烂了,但我有点困惑,而且我在SO或谷歌上没有找到确切的答案(我不确定是否正确 - C字符串的信息太多要筛选)。此外,我已经标记了它是C++,即使我们具体说的是C风格的字符串。
在这种情况下:
char const a* = "hello";
char const b[] = "goodbye";
我本以为“hello”和“goodbye”都是不可变字符串,因为它们来自应该会衰减为char const* 的字符串字面值。但我已经看到,在这种特殊情况下,假设你从b数组中去掉const修饰符的话,更改“hello”将导致未定义行为,而更改“goodbye”则可以。我认为之所以在b的情况下字符串是可变的,是因为它存储在用户定义的数组中。
在这种情况下,“hello”和“goodbye”是否不同?给定这个例子,goodbye不是一个字符串字面值吗?此外,如果goodbye不是一个字符串字面值,我可以假设它没有被保存在全局内存中,在编译后对它的唯一引用是留在用户数组单元格中的引用。
*
位于指针标识符之前,就像这样*a
。 - Salvador