一、指针及其相关内容
(1)、指针---用于存储值的地址。指针名表示的是地址,*运算符被称为间接值或解除引用运算符,将其应用于指针,可以得到该地址处存储的值。
*---内容;&---地址。
eg:
int *p;
称作:p指向int类型,或,p的类型是指向int的指针。
int * P1,P2;
其中,P1为指针,P2为int型。
赋值:(强制类型转换)
int *pt;
pt=(int *)0xB8000000; //types not match
(2)、new运算符----找到一个长度正确的内存块,并返回该内存块的地址。
eg:
int * p=new int;
new int 告诉程序,需要设和存储int 的内存。
获得并指定分配内存的通用格式如下:
typeName * pointer_name=new typeName;
(3)、分配内存的两种方法及比较
<1>int higgens;
int * p=&higgens;
<2>int * p=new int;
比较:
<1>通过名称higgens来访问该int。
<2>只能通过该指针进行访问,p指向的内存没有名称,如何称呼它呢?我们说p指向一个数据对象,这里的“对象”不是“面向对象编程”中的对象,而是一样“东西”。术语“数据对象”的“变量”更通用,它指的是为数据项分配的内存块。因此,变量也是数据对象,但p指向的内存不是变量为一个数据对象(可以是结构,也可以是基本类型)
(4)、使用delete释放内存
int *ps=new int; //allocate memory with new
...... //use the memory
delete ps; //free memory with delete when done
这将释放ps指向的内存,但不会删除指针ps本身,可以将ps重新指向另一个新分配的内存块,一定要配对的使用new和delete,否则会产生内存泄露(memory leak)
warning:只能使用delete来释放使用new分配的内存,然而,对空指针使用的delete也是安全的。
(5)、使用new来创建动态数组
int * psome =new int [10]; //get a block of 10 ints
释放:delete [] psome;
为分组分配内存的通用格式如下:
type_name * pointer_name =new type_name[num_elements];
warning:指针当做数组名使用即可,第一个元素为psome[0],第二个元素为psome[1],依此类推。
eg:
#include<iostream>
int main( )
{
using namespace std;
double *p=new double[3];
p[0]=0.2;
p[1]=0.5;
p[2]=0.8;
p=p+1; //increment the pointer
p=p-1; //point back to beginning
delete []p;
return 0;
}