在进行指针相减或指针加数字时需要进行一些调整。
指针变量(指针)中存放的是地址。
指针 + 数字:指针加法需要调整,调整的权重为指针本身去掉一个*号,求sizeof。如下图.1
指针 - 数字:指针加法需要调整,调整的权重为指针本身去掉一个*号,求sizeof。如下图.1
举例:int *p;p+2的值为p的值加上2*sizeof(int)个字节。
#include<stdio.h>
int main()
{
int *p = (int *)1000;
//把地址强转为int型的指针,值为1000
printf("%d\n",p+2);
//结果为:p = p +2*sizeof(int) = 1008;
printf("%d\n",(char ***)p+2);
//结果为:p = p+2*sizeof(char **) = 1008 因为char **是一个指针类型,所有的指针类型的权重都为四个字节
printf("%d\n",(short *)p+2);
//结果为:p =p + 2*sizeof(short) = 1004;
printf("%d\n",(short *)p-2);
//结果为:p = p - 2*sizeof(short) = 996;
printf("%d\n",(double **)p+4);
//结果为:p = p + 4*sizeof(double *) = 1016;
printf("%d\n",(double **)p-2);
//结果为:p = p - 2*sizeof(double) = 992;
printf("%d\n",(unsigned long *)p+2);
//结果为:p = p + 2*sizeof(unsigned long) = 1008;
printf("%d\n",(char *)p+2);
//结果为:p = p + 2*sizeof(char) = 1002;
printf("%d\n",(unsigned long long)p+2);
//单纯的加2,p = p +2 =