带有 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;
为什么我在计算指针时没有得到地址? 请参阅下面的代码: 代码 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;