一、指针加法 1、指针+1 (1)加一个字节  10的16进制表示:ox 0000000a 2的16进制表示: ox 00000002 20的16进制表示: ox 00000014 ox 0000140a 转化为十进制为 5130 //小端:低地址放小数据
(2)加一个单元格 直接arr[1]=20; (3)加整个数组 没意义,直接跳出了数组 综上指针+1表示加一个单元格最为合适。 指针加法需要调整(加1加一个单元格),调整的权重为指针去掉的一个星号,然后求sizeof 如 int*p ; p+1; 加4字节 = sizeof (int) double*p ; p+1; 加8字节 = sizeof (double) char**p ; p+1; 加4字节 = sizeof(char*)
int*p = (int*)100;
printf("%d\n",p+4); //116
printf("%d\n",(char*)p+4); //104
printf("%d\n",(short*)p+4); //108
printf("%d\n",(unsigned long*p+4); //116
printf("%d\n",(long long)p+4); //104 没有星号!直接就是数字100+4=104
printf("%d\n",(char**)p+4); //116
printf("%d\n",(int****)p+4); //116 2、指针+ 指针 非法 二、指针减法
1、指针减去一个数字也需要调整,调整的权重同上 int *p = (int*)ox2010;
printf("%s\n",p-2); //2008
printf("%s\n",(char***)p-2); //2008
printf("%s\n",(float*)p-2); //2008
printf("%s\n",(double**)p-2); //2008
printf("%s\n",(long long*)p-2); //2000
printf("%s\n",(char*)p-2); //200e
printf("%s\n",(unsigned long)p-2); //200e
2、指针 减 指针 合法 例如: int *p=arr; int*q =&arr[5]; q-p ? 指针减指针表示间隔的单元个数, 分为两步:1.算出间隔的字节数(正负)2.除以权重
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",(char**)q-(char**)p); //8
printf("%d\n",(short*)q-(short*)p); //16
printf("%d\n",(double*)q-(double*)p); //4
printf("%d\n",(char*)q-(char*)p); //32
printf("%d\n",(long long)q-(long long)p);//32
|