四度读读书:"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)。
投递百度等公司10个岗位 >
0 点赞 评论 收藏
分享
Funny.:你设置了 random.seed 啊,每次取随机数都是一样的
0 点赞 评论 收藏
分享
关注他的用户也关注了: