字符串常量的类型是 const char[],其本质是字符数组而非指针。1. 字符串字面量如 “abc” 被编译器处理为 const char[4],在表达式中会退化为 const char 指针;2. 不可将字符串常量赋值给 char,因其指向只读内存区域,修改会导致未定义行为;3. char arr[] = “hello” 将内容复制到栈上,char ptr = “hello” 则指向字符串常量区;4. arr 可修改,ptr 指向的内容不可修改;5. sizeof(arr) 返回数组大小,而 sizeof(ptr) 返回指针大小;6. 使用数组适用于需修改内容或独立拷贝的情况,使用指针适用于仅需读取且节省内存的情况;7. 避免用非 const 的 char 接收字符串常量;8. 相同字符串常量可能被合并存储,std::string 自动管理内部拷贝。

在C++中,字符串常量(比如
"Hello, world!"
)的类型其实是
const char[]
,也就是说它是一个字符数组。虽然很多新手会把它和
char*
混为一谈,但它们并不完全等价,背后涉及存储方式、生命周期以及使用时的一些细节。

字符串常量的类型到底是啥?
当你写
"abc"
这样的字符串字面量时,编译器会自动把它当作一个
const char[4]
类型来处理(包括结尾的