我试图得到的是一个结构,它包含一个二维字节数组,应该存储一个二进制图片。
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 = ???
}
};
如何初始化指向数据的指针?我得到一个编译的版本(在研究答案之后:A pointer to 2d array),如果我使用指向图片结构中的数组的指针,然后将指针设置为doubleUp 2D数组的第一个元素:
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]),
}
};
但是在这里我必须声明第二个数组的维度,但是我想让结构与维度相关,并将其用于高度和宽度字段。
答案 0 :(得分:2)
使用指向一维数组的指针并手动索引:
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 };
并将其解释为2d数组:
uint8 x = 1;
uint8 y = 2;
uint8 value = s.dataPointer[y*width+x];
(我将宽度从16更改为2,因此示例更清晰。如果您打算访问单个位,这个想法是一样的。)