为什么此代码具有不同的输出
Why does this code has a different output?
这是我尝试使用类指针的问题
输出:
0148D460
00FAFA84
代码:
#include "stdafx.h"
#include <iostream>
#include "TestClass.h"
using namespace std;
int main()
{
A *Aobj = new A;
B Bobj;
cout << Aobj << endl;
cout << &Aobj << endl;
getchar();
delete Aobj;
return 0;
}
Aobj
指向堆上的对象。
| Stack | | Heap |
&Aobj |A* Aobj| --> | new A |
|B Bobj |
这两个输出之间的区别是第一个打印对象Aobj
的地址指向的,在堆上
cout << Aobj << endl;
第二个是在堆栈上打印指针Aobj
的地址
cout << &Aobj << endl;
指针也是数据
所有在本地声明的变量代表存储在堆栈上的对象。动态分配和自动对象之间的区别在于,自动对象将其数据直接存储在堆栈中,而动态分配的对象将指针存储在堆栈上,该指针指向堆上的数据。
当您使用<<
运算符输出指向标准输出的指针时,发生的是对象内容(是A
的地址(将被打印出来。
将内置的操作员*
应用于对象时,它会在堆栈上创建并返回指向给定对象的指针。在输出返回的指针时,在您的第二种情况下,使用<<
,然后打印其内容,这是第一个指针的地址。
将您的记忆视为书架。然后,指针是您可以将其他东西放在其中的假空心书籍之一,例如带有另一本书的地址(或另一本假空心书(的小笔记。假空心书籍也有一个地址,就像其他书籍一样,例如在此模型中使用操作员地址在一本书上创建了一本新的假空心书,遏制了一本带有指定书的地址的便条。堆可以看作是房间另一侧的另一个书架,该书籍可以在第一本书中的假书籍中处理。
cout << Aobj << endl;
正在打印存储在您类型的" A*"变量中的值。同时,
cout << &Aobj << endl;
正在打印该变量放在内存中的地址。
相关文章:
- 为什么我的代码在输出中增加了93天
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 我无法获取以下代码的输出
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 编译并运行后,输出未出现在 Visual Studio 代码中
- VI工作室代码错误无法打开输出文件主.exe
- 代码编译没有任何输出,入门程序
- 与其他编译器相比,相同的代码在工作室Microsoft提供不同的输出
- 可能我知道为什么这段代码没有给出任何输出吗?
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- Clang 给了我符号更改的警告,但代码仍然产生正确的输出
- 为什么这两个版本的代码给出不同的输出
- 以下与指针相关的代码的输出是什么?
- C++和 Python 中的代码相同,但输出不同
- 为什么我的代码块上没有显示输出?
- C++ 高级代码未给出正确的输出
- (C++)分解这个简单的输入/输出代码:
- 错误的输出代码
- 奇怪的输出(代码块codebblocks -16.01mingw-setup.exe)