首页 > 代码库 > 4.7指针

4.7指针

4.7指针

指针的危险:

c++创建指针时,计算机会分配存储地址的内存,但是不会分配存储指针所指向的数据的内存。

如:

long *fellow;*fellow=233233;//危险,fellow指针所指向的位置是不知道的,

一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。

使用new 分配内存

指针的真正用武之地是:在运行时分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。 

#include<iostream>int main(){	using namespace std;	int nights=1001;	int *pt= new int;	*pt=1001;	cout<<"nights value = "http://www.mamicode.com/<

内存的位置随系统而异。

使用delete释放内存

int *ps=new int;delete ps;

释放ps指向的内存,但是不会删除指针ps本身。

一定要配对使用new 和delete 否则会产生内存泄露。

只能用delete释放new分配的内存,不能使用delete释放变量声明所获得内存。

不要释放已经释放的内存

int *ps=new int;//okdelete ps;//okdelete ps;//not okint a=5;int *pi=&a;delete pi;//not ok

 

使用new创建动态数组

动态创建一个包含10个元素的数组

int *a=new int[10];

new返回第一个元素的地址。

对于用new 创建的数组,释放的格式为

delete [] a;

方括号就是释放整的数组,而不仅仅是指针指向的元素。

访问动态数组可直接使用:a[0],a[1],,,a[9]

#include<iostream>int main(){	using namespace std;	double *p3=new double [3];	p3[0]=0.2;	p3[1]=0.5;	p3[2]=0.8;	cout<<"p3[1] is "<<p3[1]<<endl;	p3=p3+1;//指向下一个	cout<<"now p3[0] is "<<p3[0]<< " and p3[1] is "<<p3[1]<<endl;	p3=p3-1;//只想原来的值,以便delete的正确使用	delete[] p3;	return 0;}

  

4.7指针