指针加(减)数字,需要调整,调整的权重(格子大小)为sizeof(指针去掉一个*)
指针加法
指针+数字:加一个单元格
各类型对应字节数:
练习:
#include<stdio.h>
int main()
{
int *p=(int *)2000;
printf("%d\n",(short*)p+4);
printf("%d\n",(double*)p+4);
printf("%d\n",(float**)p+4);
printf("%d\n",(unsigned short*)p+4);
printf("%d\n",(long*)p+4);
printf("%d\n",(char*)p+4);
printf("%d\n",(unsigned long long)p+4);
printf("%d\n",p+4);
}
运行结果:
指针减法
指针-指针:表示之间格子间隔数(不是字节数)
①算出字节数
②调整权重
指针所有的算术运算都要调整,调整的权重为sizeof()
#include<stdio.h>
int main()
{
int arr[10]={1};
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",(double*)q-(double*)p);//4
printf("%d\n",(int***)q-(int***)p);//8
printf("%d\n",(char**)q-(char**)p);//8
printf("%d\n",((long)q-(long)p));//32
}
重点:p[i]=*(p+i)
[]自带解引用