char* - 为什么指针中没有地址?

最白目*_*最白目 6 c++

我有一个基本的问题,char*我不明白

char* aString = "Hello Stackoverflow";
Run Code Online (Sandbox Code Playgroud)

指针指向字符链的第一个字符.

cout << *aString; // H
Run Code Online (Sandbox Code Playgroud)

但为什么整个字符串都保存在指针中?

cout << aString //Hello Stackoverflow
Run Code Online (Sandbox Code Playgroud)

我希望有一个地址,不是指针中保存的地址吗?"Hello Stackoverflow"的地址在哪里?

任何帮助非常感谢

APr*_*mer 12

有一个重载operator<<(ostream&, char const*)输出从该指针开始的以null结尾的字符串,并且优先于ostream::operator<<(void*)输出该地址的运算符.

如果你想要地址,请将指针强制转换为void*.


cni*_*tar 8

从该位置开始按顺序保存字符串.C++继承的C规则只是说当你尝试使用a char *作为字符串时,它会一直读取字符,直到遇到0 字节.

如果您确实想要获取地址,请告诉cout不要将其解释为"字符串":

std::cout << (void *)aString << std::endl;
Run Code Online (Sandbox Code Playgroud)

编辑

标准陈述在哪里0 =='\ 0'?

从C++ 11草案2.3-3节:

基本执行字符集和基本执行宽字符集应各自包含基本源字符集的所有成员,以及表示alert,backspace和回车符的控制字符,以及空字符(分别为null宽字符),其表示具有全零位.