[英]How does std::cout work with char pointers?
最近我一直在学习 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
arrays 以'\0'
(nul) 字符结尾,并且 arrays 使用指针引用。 因此,当收到的参数是c
时,接收char*
的重载运算符将数组的内容打印到 nul 终止符。
当接收到的参数是*c
时,这会取消引用访问其数据的指针,并且由于这是指向char
的指针,因此接收char
的重载运算符将其打印为单个char
。
要打印字符串数组的地址,可以将char*
指针强制转换为void*
,如下所示:
std::cout << (void*) c << std::endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.