#include <iostream>
#include <cstring>
using namespacestd;
char * getName();
int main(int argc,const char * argv[]) {
// insert code here...
char *name;
name = getName();
string sb = name;
cout << name <<" at " << (int *)name <<"\n";
cout << *name <<" " << sb << endl;
cout << &sb <<endl;
delete [] name;
name = getName();
sb = name;
cout << name <<" at " << (int *) name <<"\n";
cout << *name <<" " << sb << endl;
cout << &sb <<endl;
delete [] name;
cout << sb <<endl;
cout << &sb <<endl;
return0;
}
char *getName()
{
char temp[80];
cout <<"Enter last name: ";
cin >> temp;
char *pn =new char[strlen(temp) +1];
strcpy(pn, temp);
return pn;
}
Enter last name: haha
haha at 0x100200a50
h haha
0x7fff5fbff730
Enter last name: hehe
hehe at 0x100200a50
h hehe
0x7fff5fbff730
hehe
0x7fff5fbff730
Program ended with exit code: 0
观察:
1.name是数组,所以输出*name的时候,是依据输出*name[0]
2.string输出,是因为c++中cout方法定义类型输出。
3.string = 某指针,猜想是stl源码做了类似
malloc ---->strcpy( des , ori) ---> string的运算符重载,有待验证!
以上疑问我在stackoverflow上提问得到了回复,具体链接
http://stackoverflow.com/questions/34453751/how-stdstring-work-in-compiler