簡體   English   中英

初始化結構中的2D數組的指針

[英]Initialize pointer to 2D array in structure

我試圖得到的是一個結構,其中包含一個2D字節數組,應該存儲一個二進制圖片。

typedef enum{
    PIC_ID_DOUBLE_UP,
    PIC_ID_DOUBLE_DOWN,
}PICPictureId_t;

typedef struct{
    PICPictureId_t  picId;
    uint8           width;
    uint8           height;
    uint8           (**dataPointer);
}PICPicture_t;

尺寸(以像素為單位)由寬度和高度確定。 現在,我嘗試初始化圖片數組。 我想將所有數據存儲在閃存中。

PICPicture_t pictures[] = {
    {
        .height       = 3,
        .width        = 16,
        .picId        = PIC_ID_DOUBLE_UP,
        .dataPointer  = ???        
    }
};

如何初始化指向數據的指針? 如果我在圖片結構中使用指向數組的指針,然后將指針設置為doubleUp 2D數組的第一個元素,則可以獲得編譯的版本(在此處研究答案: 指向2d array的指針之后):

typedef struct{
    PICPictureId_t  picId;
    uint8           width;
    uint8           height;
    uint8           (*dataPointer)[2];
}PICPicture_t;

uint8 doubleUp[3][2] = {
    {0x12 ,0x13},
    {0x22 ,0x32},
    {0x22 ,0x32}
};


PICPicture_t pictures[] = {
    {
        .height       = 3,
        .width        = 16,
        .picId        = PIC_ID_DOUBLE_UP,
        .dataPointer  = &(doubleUp[0]),
    }
};

但是在這里,我必須聲明第二個數組的維,但是我想使結構獨立於維,並為此使用height和width字段。

使用指向一維數組的指針並對其手動進行索引:

typedef struct{
PICPictureId_t  picId;
uint8           width;
uint8           height;
uint8           *dataPointer;
}PICPicture_t;

圖像數據將必須更改為一個維度:

uint8 d[6] = {
    0x12 ,0x13,
    0x22 ,0x32,
    0x22 ,0x32
};

您可以初始化它:

PICPicture_t s = { 3 , 2, ID , d }; 

並將其解釋為二維數組:

uint8 x = 1;
uint8 y = 2;
uint8 value = s.dataPointer[y*width+x];  

(我將寬度從16更改為2,因此示例更加清晰。如果您打算訪問單個位,則想法是相同的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM