char p;
cout << &p;
Run Code Online (Sandbox Code Playgroud)
这不会打印字符p的地址.它打印一些字符.为什么?
char p;
char *q;
q = &p;
cout << q;
Run Code Online (Sandbox Code Playgroud)
即使这样也没有.为什么?
我相信<<操作员会将其识别为字符串.将它投射到void* 应该工作:
cout << (void*)&p;
Run Code Online (Sandbox Code Playgroud)
std::basic_ostream有一个专门的运算符,它取一个std::basic_streambuf(基本上是一个字符串(在这种情况下)):
_Myt& operator<<(_Mysb *_Strbuf)
Run Code Online (Sandbox Code Playgroud)
而不是采用任何指针的运算符(char*当然除外):
_Myt& operator<<(const void *_Val)
Run Code Online (Sandbox Code Playgroud)
这是因为指向的指针char有自己的 重载<<,它将指针解释为 C 字符串。
您可以通过向 中添加强制转换来修复您的代码void*,这是打印指针的重载:
char p;
cout << (void*)&p << endl;
Run Code Online (Sandbox Code Playgroud)
请注意,问题发生在char指针上,但不会发生在其他类型的指针上。比方说,如果你在声明中使用int而不是char,你的代码无需强制转换即可工作:
int p;
cout << &p << endl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3094 次 |
| 最近记录: |