我正在研究一个使用指针的字符串类,我在理解我的print函数在这里工作时遇到了一些困难.具体来说,为什么cout << pString输出字符串而不是它指向的动态数组的内存地址?我的理解是变量pString是一个指针.
class MyString
{
public:
MyString(const char *inString);
void print();
private:
char *pString;
};
MyString::MyString(const char *inString)
{
pString = new char[strlen(inString) + 1];
strcpy(pString, inString);
}
void MyString::print()
{
cout << pString;
}
int main( )
{
MyString stringy = MyString("hello");
stringy.print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Mys*_*ial 10
这是因为<<操作员已经过载以处理a的情况char*并将其作为字符串打印出来.与地址相反(其他指针就是这种情况).
我认为这样做是为了方便 - 可以轻松打印字符串.
编辑:
因此,如果要打印出地址,则应将指针强制转换为a void*.
变量pString 是一个指针.但是,<<与输出流一起使用时的实现知道如果尝试输出a char *,则应将输出打印为以null结尾的字符串.
尝试:
cout << static_cast<void *>(pString);
Run Code Online (Sandbox Code Playgroud)