博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

堆的首地址和堆的指针

Posted on 2014-10-12 17:18  六年一班刘同学  阅读(351)  评论(0编辑  收藏  举报
 1 #include "stdafx.h"
 2 #include "iostream"
 3 
 4 using namespace std;
 5 
 6 class CStu
 7 {
 8 private:
 9     int M_Id;
10     int M_Age;
11 public:
12      void set(int x)
13      {
14          M_Id = x;
15      }
16 
17 };
18 
19 int main(int argc, char* argv[])
20 {
21     CStu *p = new CStu;        //在堆中创建一块可以存储CStu类的内存空间,并用指针p指向这块内存空间的首地址.
22                                //因为创建的这个堆的类型是CStu型.所以指针的类型也是CStu型.
23     cout << p << endl;         //打印出的是这个申请的堆的首地址.这个地址每次编译后都不一样的.
24     cout << &p << endl;        //打印了存放堆地址的这个内存的单元编号.
25 
26 //---把这个堆的指针消除掉----
27     delete p;
28     cout << p << endl;        //删除这个指向堆的指针以后,每次运行,p里面的值得都会改变,有不确定性.
29                             //所以说在这样的情况下,这个p绝对是个迷途指针.
30                             //如果还想找回刚才那个堆的首地址,那是不可能的事,所以一定要注意什么时候用delete.
31 
32     cout << &p << endl;        //p还是存在的,并且p的地址一直没改变,只是p里面的内容再不断改变而已.
33 
34     return 0;
35 }