C++ C+中字符的指针+;

C++ C+中字符的指针+;,c++,C++,根据书籍,第一行应该打印存储字符变量b的位置的地址,这似乎也是int变量a的情况。但是第一个cout语句输出一个奇数'dh^#',而第二个语句正确地输出一个十六进制值 ox23fd68'。为什么会这样 #include<iostream> using namespace std; int main() { char b='d'; int a=10; char *c=new char[10];

根据书籍,第一行应该打印存储字符变量b的位置的地址,这似乎也是int变量a的情况。但是第一个cout语句输出一个奇数'dh^#',而第二个语句正确地输出一个十六进制值 ox23fd68'。为什么会这样

 #include<iostream>
    using namespace std;

    int main()
    {
        char b='d';
        int a=10;
        char *c=new char[10];
        c=&b;
        int *e=&a;
        cout<<"c: "<<c<<endl;
        cout<<"e: "<<e;
    }
#包括
使用名称空间std;
int main()
{
charb='d';
INTA=10;
char*c=新字符[10];
c=&b;
int*e=&a;

实际上这个程序有问题。内存泄漏

char *c=new char[10];
c=&b;
这将在堆上分配10个字符,但随后指向堆的指针将被变量
b
的地址覆盖


当使用
操作符将
char*
写入
cout
时,存在非成员重载

int*
的行为是不同的,因为对指向
int
的指针没有特殊的处理,语句会像预期的那样将地址写入流

如果要获取字符的地址,请使用
static\u cast

std::cout << static_cast<void*>( c ) << std::endl;

<代码> STD::“书”应该<代码> C:“< /Cord>”也打印地址?这不是一个坏问题,但可能在别处回答。简短的答案是C++继承了C的代码“ch**/COD>”作为“可能是可打印的东西的集合”。.你是从什么书中得到这个想法的?如果这是你的书教给你的,请扔掉它,然后尝试一些东西。我更倾向于认为OP是按书来做的,然后推断他们所学到的,结果发现,
char*
的处理方式与所有其他指针类型不同。尽管它可能很常见o对于那些在(开发人员)一生中都见过C风格字符串的人来说,这是令人惊讶的。
dÌÿÿ, 0xffffcc07
std::cout << static_cast<void*>( c ) << std::endl;