1.字节数
char short int float double long longlong
字节数 1 2 4 4 8 4 8
2. 指针+1,计算指针+1具体加几个字节的方法是,给指针去掉一个型号,让后用sizeof()求出字节大小
int* p
整形指针变量 p+1,加4字节 sizeof(int) == 4
double* p;
浮点型指针变量 p+1,加8字节 sizeof(double) == 8
char **p;
字符型指针变量 p+1,加4字节 sizeof(char *) == 4
例如:
int main()
{
int *p = (int *)100;//(int*)
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
printf("%d\n",(char **)p+4);//116
printf("%d\n",(int ****)p+4);//116
return 0;
}
3.指针-1
对于指针的减法而言 它可以表示为 指针减去一个数数,和指针加一个数 差不多 都需要调整权重
int main()
{
int *p = (int *)0x2010;//为16进制数
printf("%x\n",p-2);//2008
printf("%x\n",(char***)p-2);//2008
printf("%x\n",(float*)p-2);//2008
printf("%x\n",(double **)p-2);//2008
printf("%x\n",(long long *)p-2);//2000
printf("%x\n",(char*)p-2);//200e
printf("%x\n",(unsigned long)p-2);//200e
return 0;
}
4.指针-指,指针-指针表示两个指针之间间隔的单元格子数
int main()
{
int arr[10] = {0};
int* p = &arr[1];
int* q = &arr[9];
printf("%d\n",p-q);// -8 表示p和q间隔八个单元格 (p-q)/sizeof(int)=-8
printf("%d\n",q-p);// (q-p)/sizeof(int)=8
printf("%d\n",(char**)q-(char**)p);// 8 (p-q)/sizeof(char*)=8
printf("%d\n",(short*)q-(short*)p);//16 (p-q)/sizeof(short)=8
printf("%d\n",(double*)q-(double*)p);//4 (p-q)/sizeof(double)=4
printf("%d\n",(char*)q-(char*)p);//32 (p-q)/sizeof(char)=32
printf("%d\n",(long long)q-(long long)p);//32 此时p q不是指针 q-p=32
return 0;
}
注:指针+指针是非法操作
指针算法只能解一次应用,也就是去掉一个*