c - C中的地址转换

标签 c hardware

关于小端和大端的问题:

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,它占用四个字节0x1f000x1f010x1f020x1f03 的空间。尽管如此,当您创建对它的引用时,您将仅获得起始地址,因为大小由类型隐含。

因此,当您创建对 int 的引用并将其转换为 char 引用时,您不会更改地址,您只需告诉编译器处理它作为 char 而不是。 IE。地址仍然是 0x1f00,当您取消引用它时,您将读取存储在那里的任何内容,这就像您说 MSB 表示小端机器,LSB 表示大端机器。

关于c - C中的地址转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20739559/

相关文章:

hardware - 处理器在等待主内存获取时做什么

c - 我的代码有什么问题吗? (打印存档文件内的文件名)

c - 在makefile中包含静态库来创建目标文件

c# - 布数字化仪!制作真实布料的 3d 模型

linux - 有什么方法可以找到开机自检 (POST) 日志/结果?

hardware - 用于多显示器物理设置的描述文件

android - 从 Android 应用程序控制串行设备(如 USB 打印机)

c - 线程初始化

c - 您如何使用 Xcode 在 OS X 上以普通用户身份调试 libpcap 代码?

c - 以 IEEE 754 交换格式记录/读取 C double