带有 C 风格字符串的 C++ 指针

C++ pointer with c-style string

为什么我在计算指针时没有得到地址? 请参阅下面的代码: 代码 1:

string s1 {"NAME"};
string *p1 {&s1};
cout<<p1; 

给出 0x71fcc0,这是有道理的。 但是看看当我使用 cstyle 字符串时会发生什么:

char cstring1 [] {"NAME"};
char *cp2 = &cstring1[0];
cout<<cp2<<endl; 

在屏幕上打印NAME 那么为什么它不打印地址?

So why it doesn't print an address ?

因为它是指向char的指针。当插入到字符流中时,指向字符的指针与其他指针的处理方式不同。

将指向 char 的指针插入字符流时,会生成指向的字符串,而不是地址。如果指向的字符串不是空终止的,则程序的行为未定义。

正如其他人指出的那样,const char* 被视为字符序列,而不是指针。

如果你想打印地址,你可以试试这个:

cout<< static_cast<void*>(cp2) <<endl;