指针的算术运算:
1.指针+数字(有意义):需要调整,调整的权重(格子的大小)为sizeof(指针去掉一个*)
指针+1(向后移动):不是加一个字节或者加整个数组,而是加一个单元格
2.指针-数字(有意义):需要调整,调整的权重(格子的大小)为sizeof(指针去掉一个*)
指针-1(向前移动):减一个单元格
eg:
int *p=(int *)0x2010;//0x2010为十六进制
printf("%x\n",p-2);//2016-(2*sizeof(int))=2016-2*4=2008
printf("%x\n",(short *)p-2);//2016-(2*sizeof(short))=2016-2*2=200c
printf("%x\n",(unsigned long *)p-2);//2016-(2*sizeof(unsigned long))=2016-2*4=2008
printf("%x\n",(long long **)p-2);//去掉一个*后,变为一级指针,而一级指针占4个字节,即为2016-2*4=2008
printf("%x\n",(float *)p-2);//2016-(2*sizeof(float))=2016-2*4=2008
printf("%x\n",(double *)p-2);//2016-(2*sizeof(double))=2016-2*8=2000
printf("%x\n",(char *)p-2);//2016-(2*sizeof(char))=2016-2*1=200e
printf("%x\n",(unsigned long )p-2);//是数字,不是指针,直接减去,即为2016-2=200e
3.指针+指针(非法无意义)
4.指针-指针(有意义) : 表示间隔的单元个数(不是字节数)
方法:(1)算出字节数 (2)除以调整的权重