C++中字符串字面量
C++中字符串字面量
在C/C++中用双引号括起来的字符序列就叫做字符串字面量,如“abc”
在C++中字符串字面量的本质就是 ==const char[] 类型==,如”hello”就是const char[6]型
在必要的时候,可以将字符串字面量转化为 ==const char*类型==的指针,该指针指向字符串的首字符
所以,C++的字符串字面量是不允许被修改的,且指针赋值时也必须有规定1
2const char* str = "hello"; //这样赋值才对
char* str = "hello"; //报错但是,C中的字符串字面的的本质是 ==char[] 类型== ,也就是说理论上C的字符串字面量是 可以被修改的,但这是==未定义行为==,一旦由此操作程序或许会崩溃
下面以”hello”为例
- “hello”是数组类型的左值,且是不可被修改的左值,也就是说&”hello”是合法的
- “hello”在必要时可以转化为指针,等同于 &(“hello”[0])
1 |
|
此外,因为数组类型左值无法修改,所以 “hello” += 1 是不允许的
1 | char s[] = "hello"; |
这里的”hello”是作为左值使用来为s数组赋初值,所以不会转化为指针,所以s是独立的并不会指向”hello”的地址
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星の夜!
