正在打印什么?C++指向整数的指针
What is being printed? C++ pointer to an integer
所以我有以下(非常简单的)代码:
int* pInt = new int(32);
std::cout<< pInt << std::endl; //statement A
std::cout<< *pInt << std::endl; //statement B
std::cout << &pInt << std::endl; //statement C
所以这就是我认为我正在做的事情(我了解到,在C++我很少做我认为我正在做的事情):
- 创建指向整数的指针并将其称为 pInt
- 语句 A 打印值 '32' 的地址
- 语句 B 打印我的指针指向的整数值(这样做是因为我取消引用指针,从而允许我访问它所指向的内容)。
- 语句C 打印指针本身的地址(而不是整数值 '32' 的地址)。
这一切都正确吗?
你的第二种说法是错误的。从堆中分配一个新的 int。编译时常量"32"没有地址,因此不能使用它。创建一个值为 32 的 int。这不是一回事。
int* pInt1 = new int(32);
int* pInt2 = new int(32);
pInt1 和 pInt2 不相等。
哦,最后一件事 - C++是一种非常强类型的语言,并且没有必要在变量名称前面加上类型数据。这称为匈牙利符号,在Microsoft C 库和示例中很常见,但在这里通常是不必要的。
- 打印 pInt 的内存地址,该地址指向包含值 32 的内存区域(4 字节):
std::cout<< pInt << std::endl; //statement A
- 打印该内存地址的内容:
std::cout<< *pInt << std::endl; //statement B, which should print 32
- 打印指针本身的内存地址:
std::cout << &pInt << std::endl; //statement C
语句 B 打印 pInt 指向的对象的值。它指向值为 32 的 int,因此打印 32。
语句 A 和 C 未定义。在这两种情况下打印的对象都是指针,在机器级别是内存地址。大多数编译器将打印十六进制数,尽管不能保证它会这样做。该值还取决于对象的存储位置。例如,我的计算机上 32 位 Windows Vista 中的 g++ 打印:
0x900ee8
32
0x22ff1c
博兰德印花:
016E33B0
32
0012FF50
视觉C++打印
00131D10
32
0028FE24
您可能会得到不同的结果。第一个数字是由 new int() 从堆中分配并保存在 pInt 中的地址。它分配了一个 4 字节数组,在那里存储数字 32,并将地址存储在 pInt 中。第二个数字是存储的值,解释为 int。第三个数字是 pInt 的地址(在堆栈上)。
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 整数指针数组的元素是否可以指向整数数组?
- 整数指针与字符指针的情况下悬空指针
- 整数指针数组的大小
- 使用整数指针将左值转换为右值
- 打印整数指针元素时的结果不同
- 将空间分配给整数指针时出错
- 异常包括字符指针和整数指针
- 我可以在 c++ 中使用整数指针调用类的成员函数吗?
- 为什么我们不能使用整数指针声明一个数字数组
- 当我们在 c++ 中将常量整数引用分配给整数指针时,行为是什么
- 为什么允许常量整数指针指向非常量整数
- 在C++中为整数指针编制索引
- 创建字符指针和整数指针数组
- 指向整数指针的 C++ 指针
- 字符结果和整数指针之间的差异
- 删除整数指针时析构函数末尾的分段错误
- 是否可以将整数指针转换为位于该内存位置的实际整数
- 将树的每个节点替换为节点左侧所有值的和,而不使用额外的整数指针参数
- 我允许传递一个整数指针到一个函数,在c++中接受一个整数数组作为参数