为什么流式传输cout的指针不能打印地址?

ami*_*n__ 1 c++ string pointers cout char

当我打印一个char指针时printf(),它使用转换说明符决定是应该打印地址还是根据%u或%s打开整个字符串.

但是当我想做同样的事情时cout,如何cout决定在地址和整个字符串中应该打印什么?这是一个示例来源:

int main()
{
  char ch='a';
  char *cptr=&ch;
  cout<<cptr<<endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的GNU编译器中,cout尝试将ch输出为字符串.

我怎样才能得到的地址ch通过cptr使用cout

dir*_*tly 15

重载分辨率选择ostream& operator<<(ostream& o, const char *c);用于打印C风格字符串的分辨率.您希望ostream& operator<<(ostream& o, const void *p);选择其他人.你最喜欢这里的演员:

 cout << static_cast<void *>(cptr) << endl;
Run Code Online (Sandbox Code Playgroud)


Luc*_*ore 7

cout如果收到一个字符串就打印一个字符串char *,就像那样简单

下面是重载operator <<ostream:

ostream& operator<< (bool val);
ostream& operator<< (short val);
ostream& operator<< (unsigned short val);
ostream& operator<< (int val);
ostream& operator<< (unsigned int val);
ostream& operator<< (long val);
ostream& operator<< (unsigned long val);
ostream& operator<< (float val);
ostream& operator<< (double val);
ostream& operator<< (long double val);
ostream& operator<< (const void* val);

ostream& operator<< (streambuf* sb);

ostream& operator<< (ostream& ( *pf )(ostream&));
ostream& operator<< (ios& ( *pf )(ios&));
ostream& operator<< (ios_base& ( *pf )(ios_base&));

ostream& operator<< (ostream& out, char c );
ostream& operator<< (ostream& out, signed char c );
ostream& operator<< (ostream& out, unsigned char c );


//this is called
ostream& operator<< (ostream& out, const char* s );
ostream& operator<< (ostream& out, const signed char* s );
ostream& operator<< (ostream& out, const unsigned char* s );
Run Code Online (Sandbox Code Playgroud)

如果您想要地址,您需要:

ostream& operator<< (const void* val);
Run Code Online (Sandbox Code Playgroud)

所以你需要施展const void*.