通过取消引用打印字符指针与打印字符
char c = 'a';
char* p = &c;
cout << p << endl;
cout << *p << endl;
这是用 C++ 语言编写的代码。
为什么在第一个 cout 语句中程序试图打印直到找到一个空字符而在第二个语句中它只打印一个字符?
回答
在 C++ 中,char根据约定,指向的指针通常被视为“C 字符串”——它是一个以空字符结尾的chars字符串。这是大部分 C++ 标准库中的预期约定——这也适用于std::ostream。
特别是,在您的两次通话中:
- 指针
p将调用std::ostream的operator<<(const char*)重载——将其打印为以空字符结尾的字符串,并且 - 该
char*p会叫std::ostream的operator<<(char)过载字符,打印字符奇
注意:如果您想打印指针本身的地址,您将需要调用operator<<(const void*)重载——这需要显式转换为void*:
std::cout << static_cast<void*>(p) << std::endl;
不会自动发现此运算符,因为该语言认为operator<<(const char*)不需要对 进行任何类型转换p。