主题:一个简单的程序
晓予天信
[专家分:20] 发布于 2011-10-10 10:13:00
#include<stdio.h>
int main()
{
int a=0x01020304;
int *p=&a;
char *q=(char *)p;
printf("%d",*q);
return 0;
}
谁帮我编译一下上面那段程序是多少? 我的结果是4,我想看下是不是我编译器不一样。
回复列表 (共8个回复)
沙发
晓予天信 [专家分:20] 发布于 2011-10-10 10:25:00
求好心人将编译结果贴出来下啊。。。。
板凳
argentmoon [专家分:13260] 发布于 2011-10-10 10:47:00
你读懂这段程序的意思了吗
3 楼
argentmoon [专家分:13260] 发布于 2011-10-10 10:51:00
另外,你可以搜索一下
Big Endian 和 Little Endian
对你的疑惑会有所帮助
4 楼
晓予天信 [专家分:20] 发布于 2011-10-10 17:03:00
程序是我写的 先看下int数据按怎样的地址数据存储而已 结果和我想象的不一样 你们编译结果是怎样的
5 楼
windy0will [专家分:2300] 发布于 2011-10-10 20:18:00
这个不用试,我们身边的电脑基本上都会得到 4。
Intel的处理器大多数都采用little-endian, 有些同时支持little-endian big-endian的,windows和linux可能也是采用little-endian.
0x01020304 各个字节分别为:
01(第4字节) 02(第3字节) 03(第2字节) 04(第1字节)
小端(little-endian):是(低地址)先存低字节。如:0x01020304,从高字节到低字节
分别为01 02 03 04。因此在内存中(从低地址开始)分别为:
04 03 02 01. 如果只取一个字节的话,当然就是 0x4.
大端(big-endian): 是先存高字节。因此0x01020304在内存中分别为:
01 02 03 04.这种情况应该是01。这里,如果处理器是64位,
那么最高字节为0,这时,会输出0
middle-endian(PDP-endian):这种方式比较罕见,它是先存中间的字节。比如32
数0x01020304,它会先存第3字节,然后第4字节,然后第1 2字
节。因此这种情况,在内存中分别为:02 01 04 03.这时可能会
输出02.
6 楼
jiehu5114 [专家分:20] 发布于 2011-10-12 23:00:00
楼主我的运行结果也是 4 啊
4Press any key to continue
7 楼
winmain2008 [专家分:280] 发布于 2011-10-12 23:05:00
只要是你CPU是Intel出的都是4
8 楼
羽翼灵动 [专家分:80] 发布于 2011-10-29 10:19:00
codeblocks 编译的结果是 4
我来回复