如何解决std::cout 如何处理字符指针?
最近我一直在学习 C++ 指针,但我对 char 感到困惑。
char *c = "sampletext";
cout<< *c <<endl;
cout<< c <<endl;
cout<< &c <<endl;
更准确地说:为什么 cout<< c <<endl;
打印整个 C 字符串而不是地址(例如它发生在 int 指针中),
以及为什么 cout<< *c <<endl;
打印第一个字母而不是整个 C 字符串。提前致谢
解决方法
发生这种情况是因为编译器检查参数的类型并调用接收该类型的运算符的重载版本。
在 C 语言中,字符串被实现为以 char
(nul) 字符结尾的 ’\0’
数组,并且使用指针来引用数组。因此,当接收到的参数为 c
时,接收 char*
的重载运算符会打印数组的内容,直到 nul 终止符为止。
当接收到的参数是 *c
时,这将取消引用访问其数据的指针,并且由于这是一个指向 char
的指针,因此接收 char
的重载运算符将其打印为单个 char
。
要打印字符串数组的地址,可以将 char*
指针强制转换为 void*
,如下所示:
std::cout << (void*) c << std::endl;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。