【发布时间】:2018-01-21 15:30:30
【问题描述】:
我正在尝试构建一个简单的虚拟机。我有一个代表它的内存的数组(uint8_t 的数组)。为了更具表现力,我 typedef 一个数组 uint8_t:
typedef uint8_t chip8_memory[0xfff];
我将此数组作为参考传递给我的代码库:
void chip8_2nnn(const chip8_opcode oc, chip8_cpu_state* cs, chip8_memory* m) {
m[cs->sp] = cs->pc & 0xff;
m[cs->sp + 1] = cs->pc >> 8;
cs->sp -= 2;
cs->pc = nnn(oc);
}
上述函数产生如下错误:
chip8.c:41:17: error: array type 'chip8_memory' (aka 'uint8_t [4095]') is not assignable
m[cs->sp] = cs->pc & 0xff;
~~~~~~~~~ ^
chip8.c:42:17: error: array type 'chip8_memory' (aka 'uint8_t [4095]') is not assignable
m[cs->sp + 1] = cs->pc >> 8;
~~~~~~~~~~~~~ ^
2 errors generated.
最小的失败示例:
TEST(foo, bar) {
typedef int foo[3];
foo bar = {1, 2, 3};
foo* baz = &bar;
bar[2] = 5;
baz[2] = 5;
}
解决此问题的最佳方法是什么?我想要一个类型名称,它表明它不仅仅是一个数组,而是内存。而且我还想在代码库中传递它并读取/修改它的值。
谢谢!
【问题讨论】: