【发布时间】:2017-01-19 14:45:36
【问题描述】:
我试图得到的是一个结构,它包含一个二维字节数组,应该存储一个二进制图片。
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 数组的第一个元素,我会得到一个可以编译的版本(在此处研究答案后:A pointer to 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]),
}
};
但在这里我必须声明第二个数组的维度,但我想让结构独立于维度并为此使用高度和宽度字段。
【问题讨论】:
-
您不能像其他成员那样真正内联初始化它。您必须使用
malloc手动分配行和列。 -
也许我必须补充一点,我想将它存储在闪存中。
-
如果图片是嵌入式系统使用的 NVM 常量,那么 malloc 没有任何意义。