请教C++中的string,char,char*的区别 与联系

发布网友

我来回答

1个回答

热心网友

C/C++代码中像"a"这样的字符串都会存储在可执行文件常量区,说得更具体一点是pe文件的rdata节,这是只读的。
你可以验证一下:
在你代码中写出*y = 'b'。运行时马上崩溃。
或者你写出

C/C++ code?

1

char* p = "hello string";

然后用二进制查看工具搜索exe中的这个字符串地址。再用pe查看工具看下这个地址属于哪个节。
关于pe文件有哪些节你应该清楚把,不清楚的话自己查资料。

由于编译器优化,相同的字符串会存储在相同的地址。现在假设pa指向"a"储存的地址。
变量a,x,y本身都存储在函数栈上,它们地址各不相同。
执行 string a = "a";只是将pa指向的字符串拷贝到string内部的存储空间。
关于string的内部结构,可以参考我的这篇文章:
http://blog.csdn.net/passion_wu128/article/details/38353959

执行char x[] = "a";时直接将pa指向的字符串拷贝到x

执行char *y = "a";时没有拷贝,只是将pa的地址赋值给y,两者指向同一个地址。

a==x为什么为true呢?

因为a==x相等于调用string类的operator==操作,你在这一行下断点,调试的时候step into一下就知道了
这个operator==会先将char* 类型的参数构造成一个临时的string对象,然后再比较。所以它实际比较的是字符串。

x == y只是简单的比较x和y表示的地址是否相等,x是栈上的一个数组地址,y是指向“a”的指针,当然不相等。

至于a == y,原理同a==x一样。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com