设为首页 加入收藏

TOP

Visual C++初学者指针学习指南(五)
2012-11-04 14:11:58 来源: 作者: 【 】 浏览:1866
Tags:Visual 学者 指针 学习指南
  最后的话

  最后要注意的是:你不能delete掉那些没有用new分配的内存,像下面这个样子:

  void main()

  {

   int number;

   int *pNumber = number;

   delete pNumber; // 错误:*pNumber不是用new分配的

  }


  常见问题及FAQ

  Q:为什么在使用new和delete的时候会得到“symbol undefined”错误?

  A:这很可能是由于你的源文件被编译器解释成了一个C文件,因为new和delete操作符是C++(www.cppentry.com)的新特性。通常的改正方法是使用.cpp作为你的源文件扩展名。

  Q:new和malloc的区别是什么?

  A:new是C++(www.cppentry.com)特有的关键词,并且是标准的分配内存方法(除了Windows程序的内存分配方法之外)。你绝不能在一个C C++(www.cppentry.com)程序中使用malloc,除非绝对必要。由于malloc并不是为C++(www.cppentry.com)面向对象的特色设计的,所以使用它为类对象分配内存就不会调用类的构造函数,这样就会出现问题。由于这些原因,本文并不对它们进行讨论,并且只要有可能,我亦会避免使用它们。   Q:我能一并使用free和delete吗?

  A:你应该使用和分配内存相配套的方法来释放内存。例如,使用free来释放由malloc分配的内存,用delete来释放由new分配的内存。

  引用

  从某种角度上来说,引用已经超过了本文的范围。但是,既然很多读者问过我这方面的问题,那么我在此对其进行一个简要的讨论。引用和指针十分相似,在很多情况下用哪一个都可以。如果你能够回忆起来上文的内容——我提到的“&”读作“the address of(……的地址)”,在声明的时候例外。在声明的这种情况下,它应该读作“a reference to(……的引用)”,如下:

  int& Number = myOtherNumber;

  Number = 25;

  引用就像是myOtherNumber的指针一样,只不过它是自动解析地址的,所以它的行为就像是指针指向的实际值一样。与其等价的指针代码如下:

  int* pNumber = &myOtherNumber;

  *pNumber = 25;

  指针和引用的另一个不同就是你不能更换引用的内容,也就是说你在声明之后就不能更换引用指向的内容了。例如,下面的代码会输出20:

  int myFirstNumber = 25;

  int mySecondNumber = 20;

  int &myReference = myFirstNumber;

  myReference = mySecondNumber;

  printf("%d", myFristNumber);

  当在类中的时候,引用的值必须由构造函数设置,像下面这种方法一样:

  CMyClass::CMyClass(int &variable) : m_MyReferenceInCMyClass(variable)

  {

   // 这里是构造代码

  }

  总结

  这一主题最初是十分难以掌握的,所以你最好读上它个至少两遍——因为大多数人不能立即弄懂。下面我再为你列出本文的重点:

  1、指针是一种指向内存中某个位置的变量,你可以通过在变量名前添加星号(*)来定义一个指针(也就是int *number)。

  2、你可以通过在变量名前添加“&”来获得它的内存地址(也就是pNumber = &my_number)。

  3、除了在声明中以外(例如int *number),星号应该读作“the memory location pointed to by(由……指向的内存位置)”。

  4、除了在声明中以外(例如int &number),“&”应该读作“the address of(……的地址)”。

  5、你可以使用“new”关键字来分配内存。

  6、指针必须和它所指向的变量类型相配套,所以int *number不应该指向一个MyClass。

  7、你可以向函数传递指针。

  8、你必须使用“delete”关键字来释放你分配的内存。

  9、你可以使用&array[0]来获得一个数组的指针。

  10、你必须使用delete[]来释放动态分配的数组,而不是简单的delete。

  这并非一个完全的指针指南,其中有一点我能够涉及到的其它细节,例如指针的指针;还有一些我一点也未涉及到的东西,例如函数指针——我认为作为初学者的文章,这个有些复杂了;还有一些很少使用的东西,在此我亦没有提到,省得让这些不实用的细节使大家感到混乱。   就这样了!你可以试着运行本文中的程序,并自己编写一些示例来弄懂关于指针的问题吧。
首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MFC程序员的WTL指南之工具条与状.. 下一篇使用VC++ ATL实现Office的COM插件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: