问大家一个关于C语言的问题先比较下面两句代码(int型按16位算)#define RAM_addr ((char*)0x20000)和#define RAM_addr ((int*)0x20000)用上面两种不同的方法申明一个存储空间,如果我要向这段空间中存储0x12345678,我想问一下下面的两个图那个是对的啊?
那我换个方式问你啊,刚刚可能我问题说的不是很清楚,如下图,有一个指针指向0x20000单元,现在我要把0x1234存入这个指针指向的单元中去,如果指针的类型分别是int型和char型,会有什么样不同的结果?
你这是底层问题,这还与所谓“大端机”、“小端机”密切相关。你总是说“存进去”,我就是要问你用什么语句存进去!如果是这样:
#define RAM_addr ((char*)0x20000)
*RAM_addr=0x12345678;
那么,由于char *型指针的目标只有一字节,所以无论是“大端机”还是“小端机”,由“数据截断规则”,0x20000单元只得到数据最低位的字符78(即字符x);0x20001以上的单元不会得到数据。
如果是:
#define RAM_addr ((int*)0x20000)
*RAM_addr=0x12345678;
那么,若int是4字节,则在“小端机”情况下,0x20000~0x20003单元依次为0x78、0x56、0x34、0x12;在“大端机”情况下,0x20000~0x20003单元依次为0x12、0x34、0x56、0x78。
供你参考……
歧视我觉得上面两个图都是对的,因为第一个是char型的,你看是吗?
追答你这个char型是按8位算的吗?(看到你的int型变了)如果char型还是按1个字节算的话,也没什么问题第一个图