【发布时间】:2017-01-10 15:42:54
【问题描述】:
我正在尝试学习 c++ 中的堆栈和堆,并且刚刚开始打印测试以了解它是如何工作的。
我写了这段代码:
`#include <iostream>
using namespace std;
int main (){
int a;
int b;
int *c;
int *c2;
int *d{new int};
cout << &a << " a= " << a << endl;
cout << &b << " b= " << b << endl;
cout << &c << " c= " << c << endl;
cout << &c2 << " c2= " << c2 << endl;
cout << &d << " d= " << d << endl;
delete d;
return 0;
}
输出是:
0x7ffefad88d00 a=124
0x7ffefad88d04 b=0
0x7ffefad88d08 c=0
0x7ffefad88d10 c2= 0x400b20
0x7ffefad88d18 d=0xec9c20
有 3 件事我不明白:
- 为什么值是 124?
- 为什么 c 值是 0 而不是像 c2 这样具有相同语法的指针?
- 为什么 c 的大小只有 2 个字节而不是 4 个?
【问题讨论】:
-
由于您尚未初始化
a并尝试打印其值,这是未定义的行为 - 所以任何事情都可能发生。int的大小因编译器而异。 -
谢谢,但我也没有初始化 b...为什么他没有得到编译器值?
-
0 是一个完全可以接受的随机数
-
好的。谢谢... c 呢?你知道为什么会这样吗?
标签: c++ c++11 compilation heap-memory stack-memory