gpt4 book ai didi

c - 在 C 中的数组中存储相似的 union

转载 作者:太空宇宙 更新时间:2023-11-04 08:06:16 25 4
gpt4 key购买 nike

我有一个这样定义的 union :

typedef union opWord
{
struct
{
unsigned short ARE : 2;
unsigned short opDest : 2;
unsigned short opSource : 2;
unsigned short opcode : 4;
unsigned short group : 2;
unsigned short unused : 3;
} word;
unsigned short fullReg;
} opWord;

另一个非常相似,只是位域排列不同:

typedef union immediate
{
struct
{
unsigned short ARE : 2;
unsigned short imm : 13;
} word;
unsigned short fullReg;
} immediate;

是否可以将它们以某种方式存储在同一个数组中,因为它们仅因位的排列而异?

有点像

opWord instructions[1000]?

如果不是,有没有办法把它做成一个链表?我将如何为它声明指针?

最佳答案

您不能直接将opWordimmediate 类型的对象存储在同一个数组中。你不能声明这样一个数组,如果你试图用指针转换和/或动态分配的空间来争论它,那么你就会违反严格的别名规则。

可以做的是创建一个union 类型,其中包含一个opWord 和一个immediate 作为成员,并且按照@jxh 在评论中的建议,制作该类型的数组。在最简单、最简洁的形式中,它可能看起来像这样:

union {
opWord op;
immediate imm;
} instructions[1000];

您还可以考虑将两个 union 类型合并为一个,并创建该类型的数组:

union instruction {
struct {
unsigned short ARE : 2;
unsigned short opDest : 2;
unsigned short opSource : 2;
unsigned short opcode : 4;
unsigned short group : 2;
unsigned short unused : 3;
} opWord;
struct {
unsigned short ARE : 2;
unsigned short imm : 13;
} immediate;
unsigned short fullReg;
};

union instruction instructions[1000];

这减少了所涉及的层数,这可能是有用的,代价是失去了两种指令的不同类型。

关于c - 在 C 中的数组中存储相似的 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42679621/

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