1.指针+数字
指针加法需要调整,调整的权重为sizeof(指针去掉一个*)
#include <stdio.h>
int main()
{
int *p = (int *)2000;
printf("%d\n", p + 2);//2008
printf("%d\n", (short *)p + 2);//2004
printf("%d\n", (float *)p + 2);//2008
printf("%d\n", (double **)p + 2);//2008
printf("%d\n", (char *)p + 2);//2002
printf("%d\n", (unsigned long)p + 2);//数字,不是指针//2002
return 0;
}
2.指针-数字
指针减法需要调整,调整的权重为sizeof(指针去掉一个*)
#include <stdio.h>
int main()
{
int *p = (int *)0x2010;
printf("%d\n", p - 2);//2008
printf("%d\n", (short *)p - 2);//200c
printf("%d\n", (double *)p - 2);//2000
printf("%d\n", (long long *)p - 2);//2008
printf("%d\n", (float *)p - 2);//2008
printf("%d\n", (char *)p - 2);//200e
printf("%d\n", (unsigned long long)p - 2);//数字,不是指针//200e
return 0;
}
3.指针+指针,非法
4.指针-指针,合法,表示间隔的单元个数,需要调整,调整的权重为sizeof(指针去掉一个*)
指针-指针分为两步
①算出间隔字节数
②除以调整的权重
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
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", (short *)q - (short *)p);//16
printf("%d\n", (long *)q - (long *)p);//8
printf("%d\n", (float *)q - (float *)p);//8
printf("%d\n", (long long *)q - (long long *)p);//8
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;
}