我想制作一个结构数组,问题是每个结构何时具有不同大小的数组。 我试图创建一个指向数组的指针,但我不明白这一点。
typedef struct {
char *opcodeName;
int opcodeNumber;
int howManyOprendsNeeded;
int *sourceAddressingMode;
int *destAddressingMode;
}Opcode;
typedef enum {
IMMEDIATE, DIRECT, INDEX, REGISTER
}ADDRESSING_MODE;
static const Opcode opcodes[] = {
{"mov", 0, 2, {IMMEDIATE ,DIRECT , INDEX , REGISTER},{DIRECT , INDEX , REGISTER} },
{"cmp" ,1, 2, {IMMEDIATE ,DIRECT , INDEX , REGISTER}, {IMMEDIATE ,DIRECT , INDEX , REGISTER}},
{"add" ,2, 2, {IMMEDIATE ,DIRECT , INDEX , REGISTER},{DIRECT , INDEX , REGISTER } },
{"sub" ,3, 2, {IMMEDIATE ,DIRECT , INDEX , REGISTER},{ DIRECT , INDEX , REGISTER} },
{"not" ,4, 1, {-1} , {DIRECT , INDEX , REGISTER} },
{"clr" ,5, 1, {-1} , {DIRECT , INDEX , REGISTER} },
{"lea" ,6, 2, {DIRECT,INDEX} , {DIRECT , INDEX , REGISTER} },
{"inc" ,7, 1, {-1} , {DIRECT , INDEX , REGISTER} },
{"dec" ,8, 1, {-1} , {DIRECT , INDEX , REGISTER} },
{"jmp" ,9, 1, {-1} , {DIRECT ,REGISTER} },
{"bne" ,10, 1,{-1} , {DIRECT , REGISTER} },
{"red" ,11, 1,{-1} , {DIRECT , INDEX , REGISTER} },
{"prn" ,12, 1,{-1} , {IMMEDIATE ,DIRECT , INDEX , REGISTER} },
{"jsr" ,13, 1,{-1} , {DIRECT , REGISTER} },
{"rts" ,14, 0,{-1} , {-1}},
{"stop",15, 0,{-1} , {-1}},
};
如果我不知道大小是多少,如何从 strcut 声明数组。 我得到的错误: 1.从 'int' 初始化 'int *' 使指针来自整数,而无需由 {IMMEDIATE ,DIRECT , INDEX , REGISTER} 引起的强制转换 [-Wint-conversion]。 2.标量初始值设定项中的多余元素。由 {-1} 引起。
最佳答案
首先,我想当我编译你的代码时我有很多警告,如果我是你我会尽量避免这些,墙警告不是错误,但有些是并且是调试的好方法。
大多数错误是:
使用“int”类型的表达式初始化“int *”的指针转换不兼容
一个对我来说可能很有意义的方法是,正如您事先知道数组的这些大小以这种方式声明它们:
int sourceAddressingMode[4];
int destAddressingMode[4];
但不是最优的。
对我来说最好的方法是使用二元运算符:
你的操作码变成:
typedef enum {
IMMEDIATE 0, DIRECT 1, INDEX 2, REGISTER 4
}ADDRESSING_MODE;
您的 sourceAddressingMode 和 destAddressingMode 是 int 类型。
声明很简单,看起来像
{"mov", 0, 2, {IMMEDIATE | DIRECT | INDEX | REGISTER},{DIRECT | INDEX | REGISTER} },
并且要知道例如您的第一个 opCode 有一个 DIRECT 的 sourceAddressingMode,您可以使用 '&' 运算符,例如:
if (Opcode[0].sourceAddressingMode & DIRECT)
//do stuff
希望这会有所帮助,我很高兴知道 kiran Biradar 对这个解决方案而不是强制转换的看法。干杯
关于c - 如何声明从结构到最终数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57492109/