您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
Visual C++初学者指针学习指南
[文章信息]
作者:CQFZ
时间:2005-02-01
出处:天极BLOG
责任编辑:方舟
[文章导读]
指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据……
advertisement
热点推荐
· 使用VC++ ATL实现Office的COM插件
· 软件多媒体教程录制方法详解
· 1月31日软件精选 邮箱及IE安全设置指南
· “金闪客奖”获奖名单隆重公布
· PS色彩调整简明教程:色阶
[正文]

上一页  1 2 3 4 5  下一页

  动态分配

  动态分配也许可以算是指针的关键技术了。它被用于在没有定义变量的情况下分配内存,然后由一个指针指向这段内存。虽然这个概念好像很让人糊涂,其实它很简单。以下的代码解说了如何为一个整数分配内存空间:

  int *pNumber;

  pNumber = new int;

  第一行代码声明了一个指针pNumber,第二行代码分配了一个整数的空间,并使pNumber指向这一段新分配的内存。下面是另外一个例子,这一次使用了一个double:

  double *pDouble;

  pDouble = new double;

  这些规则是相同的T,所以你应该可以很容易地掌握。

  动态分配和本地变量的不同点是:你分配的内存在函数返回和语句块结束的时候不会被释放,所以,如果你用动态分配来重新编写上面的代码,那么它就会正常工作了:

  #include

  int *pPointer;

  void SomeFunction()

  {

   // 使pPointer指向一个new的整数

   pPointer = new int;

   *pPointer = 25;

  }

  void main()
  {
   SomeFunction(); // 让pPointer指向某些东西
   printf("Value of *pPointer: %d\n", *pPointer);
  }


  请通读并编译以上的示例代码,并确信你已经弄懂了它为何如此工作。当调用SomeFunction的时候,它分配了一段内存,并使pPointer指向这段内存。这一次当函数返回的时候,这段new的内存就会完好保留,所以pPointer仍然指向某些有用的内容。这就是动态分配了!请确信你已经搞懂了这一点,然后继续阅读关于这段代码中的一个严重错误。

  来得明白,去得明白

  还有一个复杂的因素,并且是十分严重的——虽然它很好补救。问题是你分配的内存在离开的时候虽然仍然完好,但是这段内存永远也不会自动销毁。这就是说,如果你不通知电脑结束使用的话,这段内存就会一直存在下去,这样做的结果就是内存的浪费。最终,系统就会因为内存耗尽而崩溃。所以,这是相当重要的一个问题。当你使用完内存之后,释放它的代码非常简单:

  delete pPointer;

  这一切就这么简单。不管怎样,在你传递一个有效的指针——亦即一个指向一段你已经分配好的内存指针,而不是那些老旧的垃圾内存——的时候,你都需要无比细心。尝试delete一段已经释放的内存是十分危险的,这可能会导致你的程序崩溃。

  好了,下面又是那个例子,这一次它就不会浪费内存了:

  #include

  int *pPointer;

  void SomeFunction()

  {

   // 使pPointer指向一个new的整数

   pPointer = new int;

   *pPointer = 25;

  }

  void main()

  {

   SomeFunction(); // 让pPointer指向某些东西

   printf("Value of *pPointer: %d\n", *pPointer);

   delete pPointer;

  }

  唯一的一行不同也就是最本质的一点。如果你不将内存delete掉,你的程序就会得到一个“内存泄漏”。如果出现了内存泄漏,那么除非你关闭应用程序,否则你将无法重新使用这段泄漏的内存。


上一页  1 2 3 4 5  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • VC中利用FTP协议实现多线程断点续传
  • 防止Visual C++应用程序缓冲区溢出
  • MFC程序员的WTL指南之WTL 界面基类
  • MFC程序员的WTL开发指南之ATL界面类
  • ATL布幔下的秘密之窗口类的秘密
  • 安捷伦在华投资将超1亿美元 押宝手机市场
  • 台积电获中芯国际1.75亿美元 赢面子赔里子
  • 海尔集团成功海外借壳 张瑞敏未入管理层
  • 西南贝尔终结AT&T 全美最大电信运营商诞生
  • DTS否认在华违法经营 反驳专利许可垄断说
  • 白宫闹大笑话 布什任职演说中文版成搞笑版
  • 盖茨巴菲特赌美元贬值 最富二人组一唱一和
  • 茁壮网络获Macromedia授权 为内地首家企业
  • Advertisement