C++ 指针

C++ 指针

  简单记录下平时的学习中涉及到指针的注意点,其中有转别人的内容,自己再慢慢添加总结。

转:http://blog.pfan.cn/colormoon/19260.html

 

1.指针是保存内存地址的变量。

  int *pAge=0;

  值为零的指针被称为空指针。所有指针在定义时都应该被初始化。没有初始化的指针称为失控指针。

  int age=50;

  pAge=&age;

  以上是为指针赋值的完整过程。

2.对于变量,类型会告诉编译器需要多少存储器去装载。但对于指针,类型并不这样做,所有指针均是4个字节。

3.使用间接引用运算符(*)来引用指针。当一个指针被间接引用时,就读取其所保存的地址处的值。

4.指针有以下三种用途:

  i.处理自由存储区的数据;

  ii.访问类的成员数据和函数;

  iii.通过引用的方式向函数传递变量。

5.局部变量和函数形参位于栈中,寄存器则用于内存管理(如保存栈顶指针和指令指针),代码区位于代码区,全局变量区,其余的内存空间作为自由存储区,称为堆。

  栈在函数返回时会自动清除。自由存储区在程序结束之前不会自动清除,所以在占用之后必须主动释放。

6.C++中使用关键字new来分配自由存储区中的内存。new的返回值是内存的地址,它必须被赋给一个指针。如:

  unsigned short *pPointer=new unsigned short;

  当不在使用一块内存时,使用关键字delete,它的作用是释放内存。

7.内存泄漏。

  指针本身是一个局部变量,当声明指针的函数返回时,指针的作用域也就结束了,因此被丢弃了。然而由new申请的内存不会自动释放,于是这块内存就不能被其他数据使用,这种情况就称为“内存泄漏”。因此要记得使用delete来释放内存。释放后最好将指针赋值为0,变为空指针。

  另一种造成内存泄漏的情况是:在没有删除一个指针之前就对其重新赋值。如:

  unsigned short int *pPointer=new unsigned short int;

  *pPointer=72;

  pPointer=new unsigned short int;

  pPonter=84;

  这时保存72的内存空间变得不可用,也没办法再去释放它。应该是再次使用时,先释放。

8.也可以在自由存储区内为类的对象分配内存。如:

  Cat *pCat=new Cat;

  这条语句调用了默认构造函数(无参数的构造函数)。删除这类指针时,在内存释放之前会调用对象的析构函数。

  也就是说,内存分配是在类对象的构造函数中进行的,而内存删除则是在类对象的析构函数中进行的。

9.每个类的成员都有一个隐藏的指针:this指针。该指针指向每一个单独的对象,它保存了对象的地址。

10.迷途指针(或称失控指针、悬浮指针):指对一个指针调用delete时(这样会释放它的内存)却并没有把它设置为空时产生的。若此时并没有重新赋值就试图再次调用它时,就会引起不可预料的结果。

  好的解决办法是在删除一个指针后,把它设置为空指针(0)。

11.在指针的类型之前和之后可以使用关键字const,也可以在这两个位置上同时使用。

  const int *pOne;

  int * const pTwo;

  const int * const pThree;

  pOne是一个指向整型常量的指针,该指针指向的值是不能被改变的。

  pTwo也是一个指向整型的常指针,它指向的整数可以改变,但这个指针不能指向其他变量。

  pThree是一个指向整型常量的指针,它指向的值不能被改变,也不能指向其他变量。

  保持正确的窍门是观察关键字的右边是什么,如果是类型,那么值就是常量,如果是变量名,那么指针变量本身就是常量。

12.一个指针可以与另一个指针相减。

13.对内存操作的考查主要集中在:
  (1)指针的理解;
  (2)变量的生存期及作用范围;
  (3)良好的动态内存申请和释放习惯。
14       0xC0000005: Access Violation

   内存访问错误。应该是访问了不该访问的地方,可能是使用“野指针”访问造成的。比如访问一个已经释放了堆空间,或者退出函数后使用指向堆栈空间中变量的指针,声明了一个指针变量,然后没有new就进行使用。这种致命的问题一定要仔细解决彻底,不留后患。

 

 

 

原文链接: https://www.cnblogs.com/kongtiao/archive/2012/05/31/2528313.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ 指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/51556

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午3:06
下一篇 2023年2月9日 上午3:06

相关推荐