[英]multidimensional array in struct c
我已經嘗試了很長時間了。 一切似乎正常,但我收到很多警告,只想對它進行正確的編程。 問題如下:我正在制作一個游戲引擎。 我提供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;
}
提前致謝! :)
從錯誤消息中,聽起來您正在代碼中的其他地方執行此操作:
uint8_t image[10][4][3] = { ... whatever ... };
Sprite *sprite = sprite_new(10, 4, image);
這樣做的問題是,編譯器認為image
的數據類型為const uint8_t (*)[10][4][3]
,而不是uint8_t *
。 您可以通過強制轉換使其工作:
Sprite *sprite = sprite_new(10, 4, (uint8_t *)image);
至於您如何聲明Sprite
結構,user2357112是正確的。 實際上,沒有簡單的方法來聲明可變長度數組並將它們傳遞給C並保留其大小信息的函數。 在這方面,C有點愚蠢。 您始終需要將大小信息作為一個或多個單獨的參數傳遞。
之前
sprite->data = image;
您是否在為數據分配空間?
我假定您將不得不為struct Sprite
分配空間,但是它將只包含一個指針空間。 然后,您將需要為重新分配分配空間,並有數據指向它。 Finallly,您可以memcopy
在這個空間的東西...
Sprite * sprite = malloc(sizeof(Sprite));
sprite -> data = malloc( width*length*sizeof(uint8_t) );
memcopy( ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.