C++ primer plus (chapter4-2)

指针

  指针的声明

1 int *pt1;
2 int* pt2;
int * pt3
3 int*pt4; //虽然可以但是不建议 4 int* pt5,value; //pt3是一个指针,而value是一个变量;

  指针的危险:在c++中创建指针时,计算机将分配用来储存地址的内存,但是不会分配用来储存指针指向的数据内存

int* fellow;
*fellow=39; //pleace a value in never-never land

没有将地址赋给fellow,故它可能是任何值,不管它是多少,程序都将它解释为39的内存。一定要在对指针应用解除引用符*之前,将指针初始化为一个确定的,适当的地址。

1 int value=5;
2 int* pt=&value;

  指针和数字:虽然计算机通常将地址当作整数来处理,但是指针和整型是不同类型的,要将数字当作地址来用,应该使用强制类型转换将数字转换为适当的地址类型

1 int * pt1=0xB8000000;
2 int * pt2=(int *)0xB8000000;

  使用new来分配内存:指针真正的用处就是在运行阶段分配未命名的内存来储存值。

tyoename * pointer_name = new typename;

  使用delete来释放内存:使用delete是后边要加上指向由new分配的内存块的指针。

int* ps=new int;
delete ps; //释放了ps所指向的内存,但是ps不会被删除,可以将它重新指向一个新分配的农内存块

记住一定要配对使用new和delete,否则会发生memory leak。不能用delete来释放声明变量所获的的内存。不要对已经释放的内存块使用delete,因为这样做的结果是不确定的,因此一般不要创建两个指向同一个内存块的指针,因为容易增加错误的删除一个内存块两次。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。