因为内存是有序的字节序列,每个字节都有唯一的地址,所以使用这个地址就可以确定字节的位置。这样获得值的方法就叫做指针。
要获取对象的地址,就不得不提取地址运算符。在scanf中,我们也见过取地址运算符:&。
定义指针:int *p;
前面的数据类型并不是指针的类型,而是指针指向的数据的类型。其中的p存放地址,使用的时候不是使用*p,而是直接用p来存放地址。
要间接操作地址上的内容,不仅需要指针p,还要用取地址运算符"*",例如*p=&a;
new
new运算符在堆上动态分配空间,创建对象并返回对象的地址。头文件<new>。
定义:int *p=new int(0); //在堆上分配一个int类型的对象并返回它的地址,小括号里面的是初始值。
new也可以在堆上分配指定类型和大小的数组,返回首地址,但是不能对数组进行显式初始化。
定义:int *p=new int[100];
数组大小可以不必指定,被称为动态数组,但是对数组使用的某些函数不能用在它身上,如gegin(),end();
delete
堆上的空间在使用后必须释放,否则会造成内存泄漏。
对对象delete的方式为:
delete 指针; //单个对象
或者delete [ ]指针。//定义数组。
delete后的ip不是空指针,而是"空悬指针"。ip中保存的值仍是delete之前的地址值,但是这个地址单元的使用权已经归还给动态存储区。