假如没有删除第一个指针就对其重新赋值就会造成内存泄漏。
使用空值的指针会令程序出错。
指针也可以与指针相加相减比较,可以自加自减,都是相对于指针保存的地址操作,比如自加,int型的指针会自加四个字节,两个指针比较也是比较两个指针的内存地址。
常量指针
我们可以将指针声明为常量指针,该指针不可改变如:
int *const p;
但是它指向的整型变量是可以改变值的。
#include <iostream>
using namespace std;
int main()
{
int a=3;
int *const p=&a;
cout<<"a:"<<a<<endl;
a=4;
cout<<"a:"<<a<<endl;
return 0;
}
结果显示a=3和a=4。
指向常量的指针
定义一个常量指针 const int *p;
指向常量的指针指向的变量是不可以修改的,但是该指针可以被修改,与常量指针的功能相反,指向常量的常指针是指向的变量和指针都不可以修改。指向常量的常指针写为 const int *const p;。
总结:
指针可以通过内存地址间接访问数据,每个变量都有自己的地址,我们可以通过取地址符(&)获得他们的地址。他们的地址可以存储在指针变量中。我们可以通过间接运算符(*)读取指针指向地址的值。
指针的类型必须与它所指向的目标一样,指针未被初始化一个内存地址或者刚删除一个指针都要将该指针赋为0,否则的话将会导致该指针失控。
假如不想改变指针,那么将该指针定义为const,假如不想改变指针指向的值,将指针指向的值定义为const,假如既不想改变指针也不想改变指针指向的值,那么把指针和指针指向的值都定义为const。
用new在堆中可以创建一个对象,然后将内存地址赋给指针,之后我们就可以通过指针访问堆中的对象,假如要删除对象,我们只需要对指针受用关键字delete,那么就会删除指针指向的对象并释放该存储对象的内存空间。但是我们要注意一点,指针并没有删除,并且它只想原来的内存空间,因此我们必须要对它的内存地址清零或者重新赋值。