①指针加指针:指针加指针非法,无意义。
②指针减指针:结果为间隔的单元格个数,可正可负。步骤如下:
⒈算出间隔的字节数。
⒉除以调整权重。
例:
int main()
{
int arr[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",(double *)q-(double *)p); //4
printf("%d\n",(short *)q-(short *)p); //16
printf("%d\n",(char **)q-(char **)p); //8
printf("%d\n",(char *)q-(char *)p); //32
printf("%d\n",(long)q-(long)p); //32
return 0;
}
③指针加减数字:
⒈指针加减一表示加或减一个指向的单元格。
⒉指针加减需要调整,调整权重为sizeof(指针去掉*)
例:
int main()
{
int *p = (int *)1000;
//*p = 10;//error
printf("%d\n",p+4);//1016
printf("%d\n",(char *)p+4); //1004
printf("%d\n",(short *)p+4); //1008
printf("%d\n",(double*)p+4); //1032
printf("%d\n",(unsigned long*)p+4); //1016
printf("%d\n",(int ***)p+4); //1016
printf("%d\n",(longlong)p+4); //1004
return 0;
}
总结:指针的算数运算都需要调整。