指针地址,该怎么处理
指针地址
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
printf_s("%x\n",p1+5);
printf_s("%x\n",p2+5);
为什么p2结果为0x810014?
------解决方案--------------------
810004 //p2+1
810008 //p2+2
81000c //p2+3
810010 //p2+4
810014 //p2+5
知道规律了没?每+1,指针偏移一个sizeof(unsigned long) 即偏移4.
------解决方案--------------------
unsigned long 4个字节
0x810000 + 20 = 0x810014
------解决方案--------------------
指针+1不是数值加1,而是加上指针的偏移量。整型数据指针就加四个字节,字符指针就加一个字节的偏移量,一次类推,一个结构体的指针偏移多少,就看结构体占几个字节了。
------解决方案--------------------
这个很好理解啊 因为p2是个指向unsigned long的指针, 所以你每次对它加1的时候就向后跳4个字节,那么p2+5跳了20个字节,20等于16进制14;所以就有你看到的结果,而p1指向的是char,这你也许都理解了。
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
printf_s("%x\n",p1+5);
printf_s("%x\n",p2+5);
为什么p2结果为0x810014?
------解决方案--------------------
810004 //p2+1
810008 //p2+2
81000c //p2+3
810010 //p2+4
810014 //p2+5
知道规律了没?每+1,指针偏移一个sizeof(unsigned long) 即偏移4.
------解决方案--------------------
unsigned long 4个字节
0x810000 + 20 = 0x810014
------解决方案--------------------
指针+1不是数值加1,而是加上指针的偏移量。整型数据指针就加四个字节,字符指针就加一个字节的偏移量,一次类推,一个结构体的指针偏移多少,就看结构体占几个字节了。
------解决方案--------------------
这个很好理解啊 因为p2是个指向unsigned long的指针, 所以你每次对它加1的时候就向后跳4个字节,那么p2+5跳了20个字节,20等于16进制14;所以就有你看到的结果,而p1指向的是char,这你也许都理解了。