C++ 正在打印什么?C++;指向整数的指针

C++ 正在打印什么?C++;指向整数的指针,c++,pointers,C++,Pointers,因此,我有以下(非常简单)代码: int*pInt=newint(32); 你的第二句话是错的。从堆中分配一个新的int。编译时常量“32”没有地址,因此不能接受它。创建一个值为32的int。这不是一回事 int* pInt1 = new int(32); int* pInt2 = new int(32); pInt1和pInt2不相等 哦,最后一件事——C++是一种非常强类型的语言,它非常不需要用类型数据来前缀变量名。这称为匈牙利符号,它在Microsoft C库和示例中非常常见,但在这里通

因此,我有以下(非常简单)代码:

int*pInt=newint(32);

你的第二句话是错的。从堆中分配一个新的int。编译时常量“32”没有地址,因此不能接受它。创建一个值为32的int。这不是一回事

int* pInt1 = new int(32);
int* pInt2 = new int(32);
pInt1和pInt2不相等


哦,最后一件事——C++是一种非常强类型的语言,它非常不需要用类型数据来前缀变量名。这称为匈牙利符号,它在Microsoft C库和示例中非常常见,但在这里通常不需要。

语句B打印pInt指向的对象的值。它指向一个值为32的int,所以它打印32

语句A和C未定义。在这两种情况下打印的对象都是指针,在机器级别是内存地址。大多数编译器将打印一个十六进制数,尽管不能保证它会这样做。该值还取决于对象的存储位置。例如,我的计算机上32位Windows Vista中的g++打印:

0x900ee8
32
0x22ff1c
Borland印刷品:

016E33B0
32
0012FF50

VisualC++打印

00131D10
32
0028FE24
你可能会得到不同的结果。第一个数字是new int()从堆中分配并以pInt格式保存的地址。它分配了一个4字节的数组,将数字32存储在那里,并将地址存储在pInt中。第二个数字是存储的值,解释为int。第三个数字是pInt的地址(在堆栈上)。

  • 打印pInt的内存地址,该地址指向包含值32的内存区域(4字节):

std::coutIf如果变量定义为int value=32;你是对的。但是,在构造函数中包含常量会使其成为对象。如果你这样做了,那么变量将被优化为常量int。你说的“使它成为一个对象”是什么意思?这是一个非常微妙的区别,但要完全理解它,必须指出它。我认为正确的措辞应该是“2.statementA打印包含值“32”的
int
的地址。@Mark Ransom:我修改了我的帖子以反映您的声明@DeadMG:例如,如果您的代码是编写的,我可以用这种方式表示所指向的值的相等性:(*pInt1==*pInt2)。这是正确的吗?@Storm Kiernan:是的,这是正确的,你编辑的声明也是正确的。
00131D10
32
0028FE24