每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。
使用指针进行的普遍操作: 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 值的指针被称为空指针。
可以对指针进行四种算术运算:++、--、+、-
假设 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];