强制转换/访问相同的内存是 C 中的不同变量

标签 c pointers memory

如果我有 4 个字节的内存并且想访问这块内存作为 unsigned long L 和字符 c[4] .在 C 中执行此操作的最有效方法是什么?
例如,如果我设置 L 到 300 那么字节将被设置为 0x0000012c ,如果我访问 c[3] 我希望看到 0x2c
如果我增加 c[3] 一,变成 0x2d L 现在的值为 301
谢谢

最佳答案

您可以创建一个 union两种类型:

union u1 {
    unsigned long l;
    char c[sizeof(unsigned long)];
};
然后,如果创建 union 类型的变量,则可以写入一个成员并读取另一个成员。
但是请记住,结果取决于系统的字节序。大多数基于 x86 的系统都是小端的,这意味着最不重要的字节在前。如果是这种情况,c[0]成员实际上具有值 2c .

关于强制转换/访问相同的内存是 C 中的不同变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69275083/

相关文章:

c++ - 比 scanf 和 printf 扫描和打印整数更有效的方法

c - 在c中使用do while循环来表示yes no提示

c - 如何制作结构数组

python - 内存增长虽然被覆盖

sql-server - sql server中的解析树缓存对象类型是什么

c - 试图定义函数来反转字符串

c++ - 存储结构的动态数组

c++ - 当我尝试使用指针打印数组元素时打印垃圾值

c - 为什么 C 代码中的引用调用不能交换 2 个值?

c - C 中结构之间的额外填充