c++中string类型的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/05 11:12:34
1.可以写string *p1;(定义一个指向字符串类型的指针)吗?
2.如果有string *p1,可以写p1=new string吗?怎样向这个内存空间中放入数据?
非常感谢各位。我其实只是想尝试用运算符new来开辟各种类型数据的内存空间。我今天又看了看书,知道了string是一个类,它所定义的字符串变量实际上是类的对象。而且,在变量中存的是字符串的地址,也就是说所定义的字符串变量实际上是个指针。我尝试了:string p="apple";cout <<p <<endl;cout <<p[0] <<endl;结果可以输出:apple 和a。不知我理解的对吗?

1.可以,指向一个string对象的指针
2.也可以,和一般的指针使用起来一样。
string *p1 = new string();
(*p1) = "abcdfg";

关于问题的补充:
不应该说“所定义的字符串变量实际上是类的对象”,
而是字符串用来初始化string对象,
或者生成一个string类的实例存储该字符串。

string对象里存的不一定是字符串的地址,取决于具体实现。
比如我可以这样做:
class string {
private:
std::vector<char> _s;
};
至于两个输出:
cout <<p <<endl;cout <<p[0] <<endl
其中的运算符<<和[]都可以重载,
所以不能从使用方法上判断其内部存储形式。

c++中string 不是“类型”,而是“类”(class).
字符串类型 用 char

指针 -- 存放地址,(或首地址)
指针 用来 指向某 (已有变量的)数据存放空间的地址,指针自己没有专放数据的内存空间。

char *p1; // 指针

p1 = (char *) malloc(20 * sizeof(char)); // 动态分配存放空间

接下来你可用 p1, p1[0],p1[1],p1[2]....

完全可以啊。我们知道string是一种数据类型,再定义一个这种类型的指针完全符合规则啊。