为何C++中int与字符串经auto相加后输出为ello?求技术解析
代码输出"ello"的原因解析
我们逐行拆解这段C++代码的行为:
auto b = "Hello";:这里的"Hello"是C风格字符串字面量,实际类型为const char*——也就是指向字符串首字符'H'的指针。auto a = 1;:变量a被推导为int类型,值为1。auto c = a + b;:这是指针算术运算。由于b是指向char的指针,和整数a相加时,指针会向后偏移a * sizeof(char)个字节。因为char的大小是1字节,所以指针会从指向'H'的位置后移1位,指向原字符串的第二个字符'e'。std::cout << c << "\n";:cout输出const char*类型时,会从指针指向的位置开始逐个输出字符,直到遇到字符串结束符'\0'。因此从'e'开始输出,最终得到ello。
需要注意:这种指针偏移写法存在风险,若偏移量超过字符串实际长度,会引发内存越界访问,属于C++中的未定义行为,只有偏移量在有效范围内时,结果才是可预期的。
内容的提问来源于stack exchange,提问作者rishi pandey
相关产品推荐
相关产品推荐

