指针问题,,帮忙看看

[复制链接]
 楼主| qczzyjdxx 发表于 2012-12-23 21:52 | 显示全部楼层 |阅读模式
我测的at89s52  单片机,,指针为什么是3个字节
我记得汇编书上写的是2个字节


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
emailli 发表于 2012-12-23 22:07 | 显示全部楼层
08到0a
不就是两个字节吗?
huangxz 发表于 2012-12-23 22:23 | 显示全部楼层
是有点奇怪啊,不知道sizeof()能不能用于指针长度的计算啊。
lzqxs89 发表于 2012-12-24 00:21 | 显示全部楼层
个人理解,仅供参考:
b1=sizeof(p1);  
b2=sizeof(p2)'
b3=sizeof(p3);
sizeof(p1)返回的应该是指针p1的类型的长度,在你程序里面应该等价于sizeof(int);但是你这里p1与p2是int类型,p3是char类型都等于 3,不理解,等后面的高手来帮你解答吧
ayb_ice 发表于 2012-12-24 08:03 | 显示全部楼层
指针有1,2,3个字节

char data *p; // 1个字节
char code *p; // 2个字节
char *p; // 3个字节
。。。
关键看指向什么地方,试想一下,一个通用指针不可能只有两个字节,地址都可能是两个字节,还需一个字节指明具体指向什么地方区间,如果定义指针时就指明只指向某个区间,就可以省一个字节,这样代码效率,执行效率会明显高些,但不通用了
。。。

评分

参与人数 1威望 +1 收起 理由
qczzyjdxx + 1 明白一点了

查看全部评分

 楼主| qczzyjdxx 发表于 2012-12-24 09:57 | 显示全部楼层

这是在32位xp系统上用vc++6.0测试的结果

我还是不明白

51单片机中有四个工作寄存器

楼上的,,你是说的这个四个工作寄存器的切换吗,,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
uet_cache 发表于 2012-12-24 10:22 | 显示全部楼层
这应该跟编译器有关,指针是地址,指针大小指的是地址占用的字节大小,理论上来说这跟CPU位数程序存储地址位数有关,不过应该也跟编译器有关,不是数据类型所占字节的大小,所以不一定是2个字节。
 楼主| qczzyjdxx 发表于 2012-12-24 10:23 | 显示全部楼层
ayb_ice  你看看这个



在指针的指针里,看到是  有的是1个字节 有的是2个字节
但是获取的变量长度都是3个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
huangxz 发表于 2012-12-24 14:26 | 显示全部楼层
楼主是用啥编译器啊,我用winavr编译器,得到的指针的长度也是两个字节的。
 楼主| qczzyjdxx 发表于 2012-12-24 18:01 | 显示全部楼层
我用的是keil4
wxsjy 发表于 2012-12-25 16:53 | 显示全部楼层
你不是51内核吗?那就跑不了C51编译器。C51编译器编译指向xdata空间的数据的指针,应该占3个字节。查查书就知道了。
sz_longyue 发表于 2012-12-25 17:55 | 显示全部楼层
我还没见过3字节的数据类型,楼主别是被KEIL调戏了吧
416775364TP 发表于 2012-12-25 19:37 | 显示全部楼层
路过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部