指针的运算
1.两个同类型的指针变量,可以比较大小
地址p1<地址p2, p1<p2值为真
地址p1=地址p2, p1=p2值为真
地址p1>地址p2, p1>p2值为真
2.两个同类型的指针变量,可以相减
两个T*类型的指针p1,p2
p1-p2=(地址p1-地址p2)/sizeof(T)
例:int *p1, *p2;
若p1指向1000,p2指向600,则:
p1-p2=(1000-600)/sizeof(int)=(1000-600)/4=100
3.指针变量加减一个整数的结果是指针
p:T*类型指针
n:整数类型的变量或常量
p+n:T*类型的指针地址,指向:地址p+ n x sizeof(T)
4.指针变量可以自增,自减
T*类型的指针p指向地址n
p++,++p:p指向n + sizeof(T)
p--,--p:p指向n - sizeof(T)
5.指针可以用下标运算符“[ ]”进行运算
p是一个T*类型的指针
n是整数类型的变量或常量
p[n]*(p+n)
通过指针实现自由内存访问
如何访问int型变量a前面的那一个字节?
int a;
char *p=(char *) &a;//&a是int*类型,所以强制类型转换
--p;
printf("%c",*p);//可能导致运行错误
*p='A';//可能导致运行错误
指针运算示例
#include <iostream>
using namespace std;
int main(){
int *p1,*p2;
int n=4;
char *pc1,*pc2;
p1=(int *) 100;//地址p1为100
p2=(int *) 200;//地址p2为200
cout<<"1)"<<p2-p1<<endl;
//输出1) 25,因为(200-100)/sizeof(int)=100/4=25
pc1=(char *) p1;//地址pc1为100
pc2=(char *) p2;//地址pc2为200
cout<<"2)"<<pc1-pc2<<endl;
//输出2) -100,因为(100-200)/sizeof(char)=-100
cout<<"3)"<<(p2+n)-p1<<endl;//输出3)29
int *p3=p2+n;//p2+n是一个指针,可以用它给p3赋值
cout<<"4)"<<p3-p1<<endl;//输出4) 29
cout<<"5)"<<(pc2-10)-pc1<<endl;//输出5) 90
return 0;
}