用一个通俗的例子解释:我们去银行存取款时,银行工作人员将根据我们的账号去找我们的存款单,找到后在存款单上写上存取款的金额,在这里账号就是存款单的指针,存款数就是存款单的内容。对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。‘
一个指针是一个地址(或首地址),是一个常量;而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们约定,“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。
1. 定义指针
C++中,定义指针方式如下:
类型名 *变量名;
其中符号“*”表示定义指针变量;类型表示该指针变量能指向对象的类型,也成为指针变量的基类型。
例如:int *p表示指针变量能指向整型变量,p的基类型为整型,也称p为整型指针。
定义指针变量时也可以指定其初值,如int a,*p=&a;
2. 间接访问运算
定义指针之后,指针指向的对象可以表示为:*指针
此时的符号“*”是指针运算符,或叫间接访问运算符,用来访问其后指针所指的对象,与指针定义处的“*”含义、功能不同。指针运算符“*”右面的对象只能是指针变量、地址或者值为地址的表达式。p表示&a,*p表示a,*&a表示a,&*p表示p。
3. 指针变量的赋值
程序运行时可使用赋值运算修改指针的值。可以将变量的地址赋给指针变量,也可将一个指针变量的值付给另一个指针变量,还可以赋NULL值。
例如:int i,*p1,*p2,*p3;
p1=&i;
p2=p1;
p3=NULL;
4. 指针的加减运算
指针可以与整数进行加减运算得出新的地址值。在对指针进行加、减整数n时,其结果不是直接加、减n,一般是加、减“n×sizeof(指针基类型)”。相同基类型的指针可以相减,结果是两指针(地址)值相隔的存储空间个数,一个存储空间一般包含sizeof(指针基类型)个字节。两个指针不能相加,无论其基类型是否相同。
5. 指针的关系运算
相同基类型的两个指针可以进行各种关系运算,指向低(小)地址端存储单元的指针小于指向高(大)地址端存储单元的指针。
6. 指针做函数参数
指针变量可以作为函数定义时的形参,对应的实参用地址或者指针变量