回 帖 发 新 帖 刷新版面

主题:一个简单的程序

#include<stdio.h>

int main()
{
    int a=0x01020304;
    int *p=&a;
    char *q=(char *)p;
    printf("%d",*q);
    return 0;
}
谁帮我编译一下上面那段程序是多少?   我的结果是4,我想看下是不是我编译器不一样。

回复列表 (共8个回复)

沙发

求好心人将编译结果贴出来下啊。。。。

板凳

你读懂这段程序的意思了吗

3 楼

另外,你可以搜索一下

Big Endian 和 Little Endian

对你的疑惑会有所帮助

4 楼


程序是我写的   先看下int数据按怎样的地址数据存储而已  结果和我想象的不一样   你们编译结果是怎样的

5 楼

这个不用试,我们身边的电脑基本上都会得到 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 楼

楼主我的运行结果也是   4 啊
4Press any key to continue

7 楼


只要是你CPU是Intel出的都是4

8 楼


codeblocks 编译的结果是 4

我来回复

您尚未登录,请登录后再回复。点此登录或注册