C语言:指针的加减

1、指针+数字:

//指针+数字:指针加法需要调整,调整的权重为指针本身去掉一个*号,求sizeof
//举例:int *p;p+2的值为p的值加上2*sizeof(int)个字节

指针+数字: 需要调整,调整的权重为sizeof(指针只去掉一个*)

首先,应该知道各个类型所占的字节:

char  1     short  2     int  4     long  4     long long  8     float  4    double  8

之后计算各个需要打印的值:

(1)p+2:去掉一个*,属于int型,sizeof()是4,则p+2为2*4+1000=1008

(2)(char ***)p+2:去掉一个*,此时的数据类型为char**,属于二维指针变量,sizeof()是4,则p+2为2*4+1000=1008

(3)(short *)p+2:去掉一个*,此时数据类型为short,sizeof()为2,则此时的p+2为2*2+1000=1004

(4)(double**)p+2:去掉一个*,此时的数据类型为double*,属于一维指针变量,sizeof()为4,则此时的p+2为2*4+1000=1008

(5)(unsigned long *)p+2:去掉一个*,此时的数据类型为unsigned long,sizeof()为4,则此时的p+2为2*4+1000=1008

(6)(char *)p+2:去掉一个*,此时的数据类型为char,sizeof()为1,则此时的p+2为2*1+1000=1002

(7)(unsigned long long )p+2:由于它将p强制转化为unsigned long long,但它不是一个指针变量,因此直接将p加上2得到1002

2、指针-数字:

//指针 -数字:需要调整,调整的权重为sizeof(指针去掉一个*)

题目中的2010是十六进制,转换成十进制为2016(只转换了后两位)

(1)p-2:去掉一个*,属于int型,sizeof(int)是4,则2016-4*2=2008;

(2)(float *)p-2:去掉一个*,属于float型,sizeof(float)是4,则2016-4*2=2008;

(3)(double *)p-2:去掉一个*,属于double型,sizeof(double)是8,则2016-8*2=2000;

(4)(short*)p-2:去掉一个*,属于short型,sizeof(short)是2,则2016-2*2=2012,后面两位转换为原来的十六进制为200c;

  (5)    (unsigned long *)p-2:去掉一个*,属于unsigned long型,sizeof(unsigned long)是4,则2016-4*2=2008;

(6)(long *)p-2:去掉一个*,属于long型,sizeof(long)是4,则2016-4*2=2008;

(7)(long long)p-2:由于它将p强制转化为 long long,它不是一个指针变量,因此直接将p减2得到2014,后面两位转换为原来的十六进制为200e;

(8)(char *)p-2:去掉一个*,属于char型。sizeof(char)是1,则2016-1*2=2014,后面两位转换为原来的十六进制为200e;

3、指针+指针:非法

4、指针-指针:间隔的单元个数,需要调整,调整的权重位sizeof(指针去掉一个*)
     指针-指针的计算:1、计算间隔的字节数,2、除以权重

(1)p-q:这两者间隔的字节数为-24,除以权重sizeof(int),即-24/4=-6;

(2)q-p:这两者间隔的字节数为24,除以权重sizeof(int),即24/4=6;

(3)(short*)q-(short*)p:这两者间隔的字节数为24,去掉一个*,属于short型,sizeof(short)为2,除以权重sizeof(short),即24/2=12;

(4)(long long*)q-(long long*)p:这两者间隔的字节数为24,去掉一个*,属于long long型,sizeof(long long)为8,除以权重sizeof(long long),即24/8=3;

(5)(double*)q-(double*)p:这两者间隔的字节数为24,去掉一个*,属于double型,sizeof(double)为2,除以权重sizeof(double),即24/8=3;

(6)(unsigned long)q-(unsigned long )p:这两者间隔的字节数为24,由于它将p、q强转为unsigned long,它并不是一个指针变量,所以q直接减p,即他们间隔的字节数为24;

(7)(char**)q-(char**)p:这两者间隔的字节数为24,去掉一个*,属于char*型,sizeof(char*)为4,除以权重sizeof(char*),即24/4=6;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值