//总结:指针的所有算术运算都需要调整,调整的权重为sizeof (指针去掉一个 * )
/*【指针+数字】√
【指针-数字】√
指针+1:加一个单元格
#include <stdio.h>
int main()
{
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 long long)p+4);//2004 //注意此括号中无*
return 0;
}
#include <stdio.h>
int main()
{
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 //注意此括号中无*
return 0;
}
*/
/*
【指针+指针】×
【指针-指针】√
//指针-指针:间隔的单元个数,不是字节数
//做法:1、算出字节数 2、除以调整的权重
#include <stdio.h>
int main()
{
int arr[10] = {1};
int *p = &arr[1];//x+4
int *q = &arr[9];//x+36
printf("%d\n",p - q);//[-(32/4)= -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 //注意此括号中无*
return 0;
}
*/