指针加减指针与数字( + and - )

今天要记录一个很重要的知识点那就是指针加减一个数和指针加减指针。

1、指针 + 一个数     

2、指针 - 一个数     

3、指针 + 指针      ×

4、指针 指针       

由上图可知,指针加指针是不可行的。

1、指针加减数

那指针加减一个数表示什么意思呢,若加的数字为n,则它的意思为加n个单元格,但是他需要调整,调整的权重为sizeof(指针去掉一个*

练习如下:

1)加法:

int *p = (int*)2000;                              答案

     printf("%d\n",p+4);                          //2016

     printf("%d\n",(short *)p+4);                  //2008

     printf("%d\n",(double *)p+4);                //2032

     printf("%d\n",(float **)p+4);                 //2016

     printf("%d\n",(unsigned short*)p+4);        //2008

     printf("%d\n",(long *)p+4);                  //2016

     printf("%d\n",(char *)p+4);                  //2004

     printf("%d\n",(unsigned longlong)p+4);   //2004(并非指针)

2)减法:

int *p = (int*)0x2010;                           答案

     printf("%x\n",p-2);                         //2008

     printf("%x\n",(short *)p-2);                 //200c

     printf("%x\n",(unsigned long*)p-2);       //2008

     printf("%x\n",(long long **)p-2);          //2008

     printf("%x\n",(float *)p-2);                //2008

     printf("%x\n",(double *)p-2);              //2000

     printf("%x\n",(char *)p-2);                //200e

     printf("%x\n",(unsigned long)p-2);       //200e

2、指针-指针

指针-指针表示的是他们两个指针之间的格子数。我们首先要算出两个指针之间的字节数,再除以调整的权重。

练习如下:

intarr[10] = {1};                                  格子数

      int *p = &arr[1];//x+4

      int *q = &arr[9];//x+36

      printf("%d\n",p-q);                             //-8

      printf("%d\n",q-p);                             //8

      printf("%d\n",(short *)q-(short*)p);             //16

      printf("%d\n",(double*)q-(double *)p);          //4

      printf("%d\n",(int ***)q-(int***)p);               //8

      printf("%d\n",(char **)q-(char**)p);              //8

      printf("%d\n",(long)q-(long)p);                  //32

综上所述,指针的所有算术运算都需要调整,调整的权重为sizeof(指针去掉一个*)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值