为什么字符指针不输出地址值, 而其他指针输出地址值?#
按照从 C 继承来的约定, char*
和 char const*
虽然是指针, 但很多时候会被认为是 字符串 进行处理 (若区别于 std::string
, 则称为 C 风格字符串).
cout
即认为 char const*
是字符串, 提供了以下函数重载:
提示
所谓 cout << value
不过是定义了一个名为 operator<<
的函数.
例如 ostream& operator<<(ostream& cout, int value);
ostream& operator<<(ostream& cout, char const*)
: 作为字符串进行输出.char*
和char const*
, 可以转换/直接传参为char const*
, 都优先采用这个版本.ostream& operator<<(ostream& cout, void const*)
: 输出指针所存储的地址.所有指针均能隐式类型转换为
void const*
指针, 故其他指针均采用这个版本.
如果确实需要输出字符指针的地址, 可以显式进行类型转换, 从而采用输出指针所存储地址的版本:
1char ch = 'a';
2std::cout << static_cast<void const*>(&ch); // 输出 ch 的地址
3
4char* pointer = &ch;
5std::cout << static_cast<void const*>(pointer); // 输出 pointer 存储的地址