指针加减指针与数字( + 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(指针去掉一个*)

猜你喜欢

转载自blog.csdn.net/C_f_hhh/article/details/79843381