如何访问用户定义的数据类型中的数组元素? (C)

时间:2019-05-19 15:45:49

标签: c arrays user-defined-data-types

我正在编写一个C程序来模拟SNES的后台模式7。我需要r(红色),g(绿色)和b(蓝色)值,以使像素显示在屏幕上的每个“点”(像素/点)上。这需要对“ tilemap”进行转换才能获得(tilemap只是一个1024 x 1024像素网格,您可以用来决定在256 x 224像素显示器上放置的内容)。我需要能够读取和写入图素图上的像素作为它们各自的r,g和b值。

为了快速解释我使用的格式,有256个“字符”,它们只是8 x 8像素块(由三个颜色字节组成,分别表示红色,绿色和蓝色)。拼贴图由这些字符中的任何一个的128 x 128网格组成。构建图块地图后,将在图块地图上执行一次转换,以识别要显示在256 x 224像素屏幕上的各个像素。

要实现这一点,我要定义:一个名为“ colour”的结构,其中包含三个用于r,g和b字节的无符号字符,一个名为“ CHR”的数据类型,该数据类型是8 x 8的“ colour” s数组,名为“ ChrRom”的数据类型,它是256个“ CHR”的数组(可能可以避免被定义,但这是我认为实际上具有数组也可以取消引用的唯一方法……我认为)。最后,我有一个名为“ Tilemap”的解引用数组,用于(希望地)将每个元素的内存地址存储在“ ChrRom”结构中。很抱歉,虽然不清楚,但这是示例代码:

typedef struct{
    unsigned char r;
    unsigned char g;
    unsigned char b;
} colour;

typedef colour CHR[8][8];

typedef CHR ChrRom[256];

int main() {
    ChrRom *Tilemap[128][128];
    //Do other computation
    return 0;
};

到目前为止,它将编译。但是,我现在要设置字符中某个像素的颜色值,然后立即出现问题。首先,我无法再访问“字符”中像素的各个颜色。我只能访问tilemap本身,其次,我仍然不知道如何读取tilemap中的颜色值。关于第二个问题(假设有一会儿,我以某种方式从文件中读取并将适当的颜色值通过管道传递到tilemap字符中,并以给定顺序组成了所述字符的tilemap),我尝试了:

//Still in the function where Tilemap was declared obviously (main)
printf("%hhu\n", Tilemap[1][1].ChrRom[7].CHR[1][3].r);

GCC不会编译它。它说:

要求成员“ ChrRom”使用非结构体或联合体

但是如果我在数组条目之前删除ChrRom和CHR,则会得到:

“ [”令牌

之前的预期标识符

1 个答案:

答案 0 :(得分:0)

  

最后,我有一个名为“ Tilemap”的解引用数组,用于(希望)将每个元素的内存地址存储在“ ChrRom”结构中。

否,通过定义ChrRom *Tilemap[128][128],您声明要存储ChrRom(仅存在一个)的内存地址。要在“ ChrRom”结构中存储元素的内存地址,必须指定这些元素的类型:CHR *Tilemap[128][128]