指针之间的几种算术运算

算术运算:

指针+数字:需要调整,调整的权重为指针本身去掉一个*,求sizeof

指针-数字:需要调整,调整的权重为指针本身去掉一个*,求sizeof

指针+指针:非法,无意义

指针-指针:间隔的单元个数,需要调整,调整的权重为size of(指针去掉一个*)

例:int *p;

       p+2的值为p的值加上2*sizeof(int)个字节

#include<stdio.h>
int main()
{
	int *p=(int *)2000;
	printf("%d\n",p-3);//1988
	//p-3*sizeof(int)
	printf("%d\n",(char*)p-2);//1998
	//p-2*sizeof(char)
	printf("%d\n",(float*)p-2);//1992
	//p-2*sizeof(float)
	printf("%d\n",(double*)p+2);//2016
	//p+2*sizeof(double)
	printf("%d\n",(short*)p+2);//2004
	//p+2*sizeof(short)
	printf("%d\n",(long*)p+2);//2008
	//p+2*sizeof(long)
	printf("%d\n",(unsigned long*)p-2);//1992
	//p-2*sizeof(unsigned long)
	printf("%d\n",(long long)p-2);//1998
	//p-2
	return 0;
}

指针-指针

#include <stdio.h>
int main()
{
	int arr[10]={0};
	int *p=&arr[1];//4(4*1)
	int *q=&arr[7];//28(4*7)
	printf("%d\n",p-q);//(4-28)/4=-6
	printf("%d\n",(short*)q-(short*)p);//(28-4)/2=12
	printf("%d\n",(long long*)q-(long long*)p);//(28-4)/8=3
	printf("%d\n",(double*)q-(double*)p);//(28-4)/8=3
	printf("%d\n",(unsigned long)q-(unsigned long)p);//28-4=24
	printf("%d\n",(char**)q-(char**)p);
        //(28-4)/4=6,去掉一个*后还是指针类型,为四个字节
	return 0;
}

关系运算:

>, >=, <, <=, ==, !=

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值