C++中cout操作符处理int与字符串相加的行为疑问
输出结果原因解释
- 代码中的
"Hello World"是C风格字符串字面量,本质为const char*类型的指针,指向字符串首个字符'H'的内存地址。 - C/C++中指针与整数做加法时,会按指针指向类型的长度计算偏移量:
char类型长度为1字节,因此3 + "Hello World"等价于将原指针向后偏移3个char长度,指向原字符串索引为3的位置(索引从0开始计数)。 - 原字符串的索引与字符对应关系如下:
索引 0 1 2 3 4 5 6 7 8 9 10 11 字符 H e l l o 空格 W o r l d \0 cout输出const char*类型变量时,会从指针指向的位置开始逐个输出字符,直到遇到字符串结束符'\0'才停止,因此从索引3的'l'开始输出,最终得到llo World的结果。
额外提示:如果偏移量超出了字符串的总长度,会触发未定义行为,可能出现乱码、程序崩溃等异常情况。
内容的提问来源于stack exchange,提问作者Madhav Oberoi
相关产品推荐
相关产品推荐

