打印

指针问题,,帮忙看看

[复制链接]
1899|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qczzyjdxx|  楼主 | 2012-12-23 21:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
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,不理解,等后面的高手来帮你解答吧

使用特权

评论回复
5
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 明白一点了
6
qczzyjdxx|  楼主 | 2012-12-24 09:57 | 只看该作者

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

我还是不明白

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

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

使用特权

评论回复
7
uet_cache| | 2012-12-24 10:22 | 只看该作者
这应该跟编译器有关,指针是地址,指针大小指的是地址占用的字节大小,理论上来说这跟CPU位数程序存储地址位数有关,不过应该也跟编译器有关,不是数据类型所占字节的大小,所以不一定是2个字节。

使用特权

评论回复
8
qczzyjdxx|  楼主 | 2012-12-24 10:23 | 只看该作者
ayb_ice  你看看这个



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

使用特权

评论回复
9
huangxz| | 2012-12-24 14:26 | 只看该作者
楼主是用啥编译器啊,我用winavr编译器,得到的指针的长度也是两个字节的。

使用特权

评论回复
10
qczzyjdxx|  楼主 | 2012-12-24 18:01 | 只看该作者
我用的是keil4

使用特权

评论回复
11
wxsjy| | 2012-12-25 16:53 | 只看该作者
你不是51内核吗?那就跑不了C51编译器。C51编译器编译指向xdata空间的数据的指针,应该占3个字节。查查书就知道了。

使用特权

评论回复
12
sz_longyue| | 2012-12-25 17:55 | 只看该作者
我还没见过3字节的数据类型,楼主别是被KEIL调戏了吧

使用特权

评论回复
13
416775364TP| | 2012-12-25 19:37 | 只看该作者
路过

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝