c - 内存布局 - C union

标签 c memory

我有一个 union 类型的数组,包含三个整数(每个 4 个字节)、一个 float (4 个字节)、一个 double (8 个字节)和一个字符(1 个字节)。

如果我将 0x31313131 分配给三个整数元素中的每一个,然后打印 union 的字符,我将得到数字 1。为什么?

我不明白输出我知道 3 0x31313131 的位是 001100010011000100110001001100010011000100110001001100010011000100110001001100010011000100110001

最佳答案

因为“1”==0x31。您将其打印为字符,而不是整数。

因为它是一个 union ,所以所有的 int 和 char 共享相同的内存位置(在这种情况下,float 和 double 无关紧要)。因此,将 0x31313131 分配给 int 确实会影响 char 值——这没什么好混淆的。

关于c - 内存布局 - C union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9834395/

相关文章:

arrays - 为什么 C 字符串并不总是等同于字符数组?

python - 在 python 中导致 outOfMemoryExeption 有多容易?

memory - gcc:设备上没有剩余空间?

c++ - 如何快速将 6 字节无符号整数复制到内存区域?

exception - C++中抛出异常后应该如何释放内存?

c - C 如何处理包含空字符的多字节字符?

c - 为什么我在以下代码中遇到段错误(核心转储)?

c - 这段代码是未定义的行为吗?操作系统和堆怎么样?操作系统如何处理堆栈?

node.js - 如何从代码中获取max_old_space_size的值?

c - 关于 glPixelStorei() 对齐的问题