指针的运算

指针的运算

1.两个同类型的指针变量,可以比较大小

  地址p1<地址p2,\leftrightarrow p1<p2值为真

  地址p1=地址p2,\leftrightarrow p1=p2值为真

  地址p1>地址p2,\leftrightarrow 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]\leftrightarrow*(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; 
} 

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值