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