【发布时间】:2019-12-20 20:36:04
【问题描述】:
我想制作一个结构数组,问题是每个结构何时具有不同大小的数组。 我试图创建一个指向数组的指针,但我不明白这一点。
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} 引起。
【问题讨论】:
-
你不能这样初始化指针。可以使用compound literals 使指针指向一个数组(例如
(int[]){ ... }),但是这个初始化必须在文件范围内,否则数组将在它定义的块结束时结束它的生命。 -
最简单的解决方案是让
sourceAddressingMode和destAddressingMode成为固定最大大小的数组。然后根据需要尽可能多地使用它们。它们目前不是数组,而是指针,鉴于您提供的这个初始化列表,这没有意义。