指针的算术运算
指针加法需要调整,调整的权重为指针本身去掉一个*号,求sizeof()。
例1:
#include<stdio.h>
int main()
{
int *p = (int *)100;
printf("%d\n",p + 2); //108
printf("%d\n",(char **)p + 2); //108
printf("%d\n",(short *)p + 2); //104
printf("%d\n",(long long*)p + 2); //116
printf("%d\n",(float *)p + 2); //108
printf("%d\n",(double *)p + 2); //116
printf("%d\n",(unsigned long)p + 2); //102
return 0;
}
例2:十六进制
#include<stdio.h>
int main()
{
int *p = (int *)0x2010;
printf("%x\n",p-2); //2008
printf("%x\n",(char *)p-2); //2002
printf("%x\n",(short **)p-2); //2008
printf("%x\n",(long *)p-2); //2008
printf("%x\n",(double *)p-2); //2000
printf("%x\n",(long long)p-2); //200e
return 0;
}
例3:数组
#include<stdio.h>
int main()
{
int arr[10] = { };//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);//32
printf("%d\n",(char ***)q - (char ***)p);//8
printf("%d\n",(double *)q - (double *)p);//4
printf("%d\n",(short *)q - (short *)p);//16
printf("%d\n",(int)q - (int)p);//32
return 0;
}