定义

每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

使用指针进行的普遍操作: 1.定义一个指针变量

2.把变量地址赋值给指针

3.访问指针变量中可用地址的值

int main ()
{
	int  var = 20;   // 实际变量的声明
	int  *ip;        // 指针变量的声明
	ip = &var;       // 在指针变量中存储 var 的地址
	cout << var << endl;//20;
	cout << ip << endl;//xxxxxx(地址)
	cout << *ip << endl;//20
}

相关概念

Null指针

在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为指针。

指针的算术运算

可以对指针进行四种算术运算:++、--、+、-

假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:ptr++

在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节。这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果 ptr 指向一个地址为 1000 的字符,上面的运算会导致指针指向位置 1001,因为下一个字符位置是在 1001。

指针间也可以进行比较。

int *p=&a[1];
p++;//跳过一个int长度->p=&a[2]
*p=a[2];

指向指针的指针(多级间接寻址)

int main ()
{
int  var;
int  *ptr;
int  **pptr;
var = 3000;
ptr = &var;// 获取 var 的地址
pptr = &ptr;// 使用运算符 & 获取 ptr 的地址
}

指针与数组

int a[10];
*(a+2)=1;//把 a[2]赋值为1
int a[3]={1,2,3};
int *p=&a[0];
p+=i;
cout<<*(p+1);//p指针的位置开始计算p[0]=a[i];