1、±1,加或者减一个指向的单元格(根据不同的类型,+1=不同的字节)
2、指针加法(减法)需要调整,调整的权重为sizeof(指针去除一个)*
3、指针+指针 非法,没有意义
4、指针-指针:结果为间隔的单元个数,可正可负,
(1)加粗样式、算出间隔的字节数,
(2)除以调整权重
总而言之:指针的算术运算都需要调整
#include "stdio.h"
int main()
{
int*p = (int *)0x2010;
printf("%x\n",p-2);//2008-----(16-8)
printf("%x\n",(char*)p-2);//200e
printf("%x\n",(float *)p-2);//2008
printf("%x\n",(double *)p-2);//2000
printf("%x\n",(unsigned long*)p-2);//2008
printf("%x\n",(short ****)p-2);//2008
printf("%x\n",(unsigned int)p-2);//200e
return 0;
}
/*
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",(long long)p+4);//1004
return 0;
}
*/
指针的加减:
int main()
{
int arr[10] = {0};//x
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",(char ***)q-(char ***)p);//8----(32/4)
printf("%d\n",(short *)q-(short *)p);//16----(32/2)
printf("%d\n",(double *)q-(double *)p);//4
printf("%d\n",(char *)q-(char *)p);//32
printf("%d\n",(long )q-(long)p);//32
return 0;
}
/*
int main()
{
int arr[10] = {1,2,3};
int *p = arr;
*p = 10;
p++;
*p = 20;
printf("%d,%d\n",arr[0],arr[1]);
return 0;
}
/
/
int main()
{
int arr[10] = {1,2,3};
int *p = arr;//
//p++; //??指针加法如何设计
p = (int *)((int)p+1);
*p = 10;
//*p = 20;
printf("%d,%d\n",arr[0],arr[1]);//2561,0
return 0;
}
/
/*