gpt4 book ai didi

c - 关于 union 和多个整数值

转载 作者:行者123 更新时间:2023-12-02 07:21:38 24 4
gpt4 key购买 nike

我正在学习 C 并尝试使用 union。我的代码如下:

#include <stdio.h>

union date {
int year ;
char month;
char day ;
};

int main() {
union date birth;
birth.year = 1984;
birth.month = 7;
birth.day = 28;
printf("%d, %d, %d\n",birth.year, birth.month, birth.day);
// return 1820,28,28
return 0;
}
  • 1984用二进制写成0111 1100 0000

  • 7用二进制写成0110

  • 28用二进制写成0001 1100

我知道因为 union ,birth.year 的值为 0111 0001 1100,即 1820。但我不明白为什么 birth.month 返回为值 28。

最佳答案

我认为您误解了 union 的目的。如果您想要一个存储一组属性(例如 d.yeard.monthd.day)的对象,您需要一个结构。

简而言之, union 让您可以将多种不同类型中的一种放入单个变量中。比如说你正在实现一个文件系统。假设您需要一个变量 current_block,它可以引用一个 super block 或一个数据 block ,分别由 struct super_blockstruct data_block 定义。然后你可以这样做:

union block_generic{
struct super_block;
struct data_block;
}

union block_generic current_block;

现在 current_block 可以是 super_block 或 data_block。

编辑:只是想添加一个关于 union 的实际用法的快速附录。继续上面的例子,把 current_block 当作一个 super block ,例如,为了访问文件系统的 inode 数量,你会做 current_block.super_block.n_inodes (我要指出的是,您没有直接处理 union 变量,而是指定了它应该戴的“类型帽子”。

关于c - 关于 union 和多个整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com