指针加一:1.加一个字节
2.加一个单元格(无所谓大端小端)
3.加一个数组
(错误1)加一个字节容易导致程序内存分配错误,导致崩溃
(正确2)
(错误3)加数字相当直接加了一组,并没有改变中间值
****重点***:指针加数字:地址值需要调整,调整的权重为sizeof(指针去掉一个*)
例子1(10进制):
#include<stdio.h>
int main()
{
int *p=(int*)1000;
printf("%d\n",p+4);//1016(1000+4*4)
//int四个字节
printf("%d\n",(short*)p+4);//1008(1000+2*4)
//short两个字节
printf("%d\n",(long*)p+4);//1016(1000+4*4)
//long四个字节
printf("%d\n",(double*)p+4);//1032(1000+8*4)
//double八个字节
printf("%d\n",(char**)p+4);//1016或1032(1000+4*4或1000*4*8)
//去掉一个*后,变为char*,指针在32位中有四个字节在64位中为八个字节
printf("%d\n",(char*)p+4);//1004(1000+4*4)
//char一个字节
printf("%d\n",(long long)p+4);//1004(1000+4)
//去掉后变为p+4
}
例子2(16进制):
int main()
{
int *p = (int *)0x2010;
printf("%x\n",p-2);//2008
printf("%x\n",(char *)p-2);//200e(因为是16进制所以需要写e,以下同理)
printf("%x\n",(float *)p-2);//2008
printf("%x\n",(double *)p-2);//2000
printf("%x\n",(unsigned long *)p-2);//2008
printf("%x\n",(short *****)p-2);//2008
return 0;
}