【发布时间】:2014-04-29 14:02:50
【问题描述】:
我已经尝试了很长时间。一切似乎都正常,但我收到很多警告,只想正确编程。 问题如下:我正在制作一个游戏引擎。 我提供 3d 数组中的图像,其中前两个索引是位置,第三个是颜色。所以一个简单的 4x4 图像将是:
static const uint8_t font_image[2][2][3] =
{
{{255,255,255},{255,255,255}},
{{255,255,255},{255,255,255}}
};
现在每个实体结构都有一个精灵结构。我想要的只是引用结构中的 3 维数组。
struct Sprite {
uint32_t sizeX;
uint32_t sizeY;
uint8_t * data;
};
每张图片都有自己的宽度和高度,所以我做不到
uint8_t [2][2][3] data;
我不断收到此警告:
消息 3 应为“const uint8_t *”,但参数类型为“const uint8_t (*)[10][4][3]” C:\Users\Elmar\Documents\GitHub\EVA-OS\EVA-OS \Libs\Game\sprite.h 28 10 EVA-OS
这是创建新精灵的函数:
Sprite * sprite_new(uint32_t width, uint32_t height, const uint8_t * image)
{
Sprite * sprite = malloc(sizeof(Sprite));
sprite->data = image;
sprite->sizeX = width;
sprite->sizeY = height;
return sprite;
}
提前致谢! :)
【问题讨论】:
-
C 的多维数组处理很糟糕。我认为每个人都倾向于将所有内容展平并手动执行索引逻辑,即使在引入 VLA 之后也是如此。
-
听起来你很想为每张图片设置
static const uint8_t font_image[SIZE_X * SIZE_Y * N],然后data可以指向它。 -
我想说你已经完美地指出了这个问题:
The problem is the following: I'm making a game engine.- 如果你正在制作游戏引擎,迟早你会发现这是你的主要问题:D -
哪行代码产生了错误?上面没有 uint8_t*[10][4][3]...
-
如果你想要的只是对 that 3D 数组的引用,那么
uint8_t (*data)[2][3]会做你想做的事。函数的参数也是如此。 (而且我很难准确理解“我想要的只是引用结构中的 3 维数组。”在这种情况下真正意味着什么。)
标签: c arrays pointers multidimensional-array struct