【发布时间】:2021-03-11 04:07:01
【问题描述】:
我在这里有点困惑。在语句const char *str="Hello";中,str是一个指向char变量的指针,指向字符串"Hello"的第一个字符'H',所以str应该包含'H'字符的地址。然而,如果我使用cout<<str,它会打印整个字符串"Hello",而不是地址。
另外,如果我使用cout<<*str 打印存储在str 指向的地址中的值,它会正确打印字符'H'。
有人能解释一下这是怎么发生的以及为什么会发生吗?这可能是非常基本的,但解释会帮助我更清楚地理解这些概念。
【问题讨论】:
-
std::cout << static_cast<const void*>(str);应该做你想做的事。有几个重载的operator<<用于std::basic_ostream,它们采用char *的变体,将变量视为c 样式字符串。这样做是因为这是人们期望它做的事情。 en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2 -
C 字符串有一个特定的重载
<<,它比void*的重载更好。
标签: c++ string char-pointer