请大家看看,谢谢!!

lys0796 2008-05-05 02:19:15
#include "stdafx.h"
#include "stdio.h"
#include "string.h"

int main(int argc, char* argv[])
{
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x10000;
p2=(unsigned long *)0x10000;

printf("p1 %lx\n",p1);
printf("p2 %lx \n",p2);


printf("p1+5 %lx\n",p1+5);
printf("p2+5 %lx \n",p2+5);
printf("unsigned long %lx \n",5*sizeof(unsigned long));
printf("指针算个屁!\n");
return 0;

}


输出结果:

p1 10000
p2 10000
p1+5 10005
p2+5 10014///为什么??
unsigned long 14///为什么??
指针算个屁!

...全文
61 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
blh 2008-05-05
  • 打赏
  • 举报
回复

p1 10000
p2 10000
p1+5 10005
p2+5 10014///为什么?? 因为 p2+5 == &p2[5],因为你定义的类型是long,每个long长度是4 bytes,所以p2+5偏移20个bytes,就是16进制的14
unsigned long 14///为什么?? 20 就是16进制的14
指针算个屁!

建议学习一下
1、16进制、8进制、2进制和10进制数之间的转换
2、不同类型指针+/-操作的地址移动长度
bo.cui 2008-05-05
  • 打赏
  • 举报
回复
。。。。。。。
网速其慢,点一下居然发2次。 5555555555
bo.cui 2008-05-05
  • 打赏
  • 举报
回复
p2=(unsigned long *)0x10000; //强制指向地址空间[0x10000]

p2 + 5 = 0x10000 + (sizeof(unsigned long) * 5) = 0x10000 + 20(0x14) = 0x10014
//p2内为地址值10000,p2类型为unsigned long,加5表示向后移动5个unsigned long类型长度,既0x10014(具体值与unsigned long的长度有关,unsigned long长度多由系统决定)

5*sizeof(unsigned long)) = 5 * 4 = 20 = 0x14//同理
bo.cui 2008-05-05
  • 打赏
  • 举报
回复
p2=(unsigned long *)0x10000; //强制指向地址空间[0x10000]

p2 + 5 = 0x10000 + (sizeof(unsigned long) * 5) = 0x10000 + 20(0x14) = 0x10014
//p2内为地址值10000,p2类型为unsigned long,加5表示向后移动5个unsigned long类型长度,既0x10014(具体值与unsigned long的长度有关,unsigned long长度多由系统决定)

5*sizeof(unsigned long)) = 5 * 4 = 20 = 0x14//同理
wbyhzh1111 2008-05-05
  • 打赏
  • 举报
回复
飘过
ForestDB 2008-05-05
  • 打赏
  • 举报
回复
指针的加减法是根据指针的类型(指针所指变量类型)来决定的.
kakaying 2008-05-05
  • 打赏
  • 举报
回复
p1 + 5 = 0x10000 + (sizeof(unsigned char) * 5) = 0x10000 + 0x5 = 0x10005
p2 + 5 = 0x10000 + (sizeof(unsigned long) * 5) = 0x10000 + 20(0x14) = 0x10014
5*sizeof(unsigned long)) = 5 * 4 = 20 = 0x14

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧