"abc"是字符串字面量,类型可以理解成是 const char[4], "abc"存放在程序的只读代码段中的.rodata中,你可以理解成在内存某个地方,假设其起始地址是0x7ffcb5ea8e88, 方便理解的话,如果有const char* p = "abc", p的值就是0x7ffcb5ea8e88 'b'是字符字面量,类型是char,'b'的ASCII码值为98,对p进行加法操作,编译器实际上进行的是sizeof(char) * 98 + 0x7ffcb5ea8e88;你把这个结果赋值给s,而s类型为string,在C++里面string是一个类,重载了operator=(const char* p),会把p指向的内容赋給s,但是p的值经过刚刚的加法操作被我们改变了,它指向的地方是sizeof(char) * 98 + 0x7ffcb5ea8e88,里面的内容自然不是我们想要的,所以会看到一串乱码。 下面那个正常是因为string类里重载了operator+=(char c),函数里面进行的操作可以理解成s1.push_back(c)。
7 5

相关推荐

大野鸡:其实就是量,但是时间有限,1000题只要不是全中等简单,简单中等困难1-2-1,大概能打打比赛了(前20%),10000题就是下一个灵神
点赞 评论 收藏
分享
10-31 13:04
南华大学 Java
嵌入式的小白:很多面试,面试前不会去打扰cto的,但一般cto不会在这些小事上刷人,只能说这个cto比较操心,啥重要不重要,紧急不紧急的,估计都会过问,平淡看待吧
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务