游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1715|回复: 7

请教个问题

[复制链接]

77

主题

203

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
发表于 2005-9-14 13:48:00 | 显示全部楼层 |阅读模式
我定义了一个整型变量intm,给intm赋值为4096,然后再定义一个整型指针变量*p1和一个字符指针变量*p2,执行如下操作:
p1=&intm;
printf("%d",*p1);
p2=(char *)p1;
printf("%d",*p2);
p1输出为4096这没有什么问题,但我以前一直认为p2应该与p1同值,只是仅输出了intm的高位字节即16
(4096的内存二进制为00010000 00000000),但机器p2输出了10,不是16,请问,这是为什么?
我这样:
void *lp;
p1=&intm;  lp=(void  *)p1;  p2=(char *)lp;p2好像输出的也不是16,我觉得这样应该可以了啊,可还是不行。
以上两个问题谁能解答一下?先谢谢了!

9

主题

198

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2005-9-14 16:56:00 | 显示全部楼层

Re:请教个问题

首先看你在什么平台上做这段程序了,首先判断int的长度是多少,16位,还是32位。然后判断cpu是如何管理内存的,一种是Big Endian(如powerpc),那么基址存储的是高位字节,另一种是little Endian(如x86),那么基址存储的是低位字节。结果应该是:
16bit(Big Endian): 16(十进制),10(16进制)
16bit(little Endian): 0
32bit(Big Endian, Little Endian): 0

77

主题

203

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2005-9-14 18:16:00 | 显示全部楼层

Re:请教个问题

按照你的说法,只能是第一种情况了,可我按10进制输出的是10,不是16啊?!这是为什么啊?

9

主题

198

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2005-9-14 18:22:00 | 显示全部楼层

Re:请教个问题

那你是在什么平台上作的?

77

主题

203

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2005-9-14 18:25:00 | 显示全部楼层

Re:请教个问题

win2000系统,vc++6.0,赛扬2.4的CPU

9

主题

198

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2005-9-14 18:33:00 | 显示全部楼层

Re:请教个问题

那结果应该是0才对。你可以做单步调试,可以设断点看看到底p1,p2以及intm是什么。

77

主题

203

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2005-9-14 18:39:00 | 显示全部楼层

Re:请教个问题

好的,再回去看一下,谢谢你,不行的话再回来请教!

77

主题

203

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2005-9-15 12:35:00 | 显示全部楼层

Re:请教个问题

不行的,
我int intm = 4096;
        int *p1;
        char *p2;
        p1=&intm;
         cout<<p1<<"|n";
         p2=(char *)p1;
         cout<<p2<<"\n";
用的是vc++6.0编辑器(c++语言)p1的值为0x0012F8,而p2的值恒定为一个三角形(给p1赋另一个变量地址也这样),这是不是因为c++与c不同,不支持这样啊?
还有一个问题,little Endian(如x86),如4096(补码形式为00010000 00000000)高位字节是00010000还是00001000?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 20:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表