关于C语言中申明int型和char型存储空间的不同

问大家一个关于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。
供你参考……

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-15
第二个,int占16位,4个十六进制数,每个4位刚好16位追问

歧视我觉得上面两个图都是对的,因为第一个是char型的,你看是吗?

追答

你这个char型是按8位算的吗?(看到你的int型变了)如果char型还是按1个字节算的话,也没什么问题第一个图

第2个回答  2019-01-29
char型是以ascii码存储的
对于int型数据:正数是用原码,负数是用补码
相似回答