与小端和大端有关的问题:
unsigned int i = 0x12345678; // assuming int is 4 bytes.
unsigned char* pc = &i;
现在,如果* pc为12,则表示它为BIG ENDIAN,因为最低地址正在存储MSB,并且如果78为Little。我的理解正确吗?
如果是,那么我的问题是,为什么pc将获得i的最低地址?它是如何运作的?另外,要存储i需要多少个内存地址?
假设一个32位架构
不管类型的大小,任何变量都将由一个地址标识。
如果int i
存储在地址0x1f00
,它占用的四个字节0x1f00
,0x1f01
,0x1f02
和0x1f03
空间。尽管如此,当您创建对它的引用时,您将仅获得起始地址,因为类型隐含了大小。
因此,当您创建对an的引用int
并将其转换为char
引用时,您无需更改地址,只需告诉编译器将其视为char
替代即可。也就是说,该地址仍然是0x1f00
,当您取消引用该地址时,您将读取其中存储的所有内容,就像您说的是小端字节序的MSB和大端字节序机器的LSB一样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句