C,多维不等数组

时间:2013-09-02 21:58:15

标签: c

我试图在平面C中声明这样的东西

const unsigned char test[][][][] = {{0x22,0x33},{0x22,0x33,0x44},{0x22,0x33,0x44,0x55},{0x22,0x33,0x45}};

但无效。我寻求一种优雅的方式来存储4个可以通过索引寻址的数组,但它们的大小不相同,因为它包含了一些设备的RS232命令。

我正在寻找命令[INITIALISE],命令[RESET]等等。

非常感谢您的建议。

2 个答案:

答案 0 :(得分:6)

通常,您不能在单个变量声明中执行此操作。我建议的是这样的:

const unsigned char command1[] = {0x2, 0x3, 0x0};
const unsigned char command2[] = {0x3, 0x0};
const unsigned char *commands[] = {command1, command2};

请注意,每个命令都有一个0x0 - 终止符;这是必需的,否则将无法知道命令字符串中有多少字节。

如果您碰巧知道命令的最大长度,那么您可以执行以下操作:

const unsigned char commands[][MAX_LENGTH+1] = {
   {0x2, 0x3},
   {0x3},
};

同样可以通过查找0x0来了解命令的长度。请注意,这会浪费空间,因为每个命令都有额外的零字节,而不是最大长度。

此答案假定0x0不是有效的命令字节。如果是,则需要单独存储每个命令的长度。

答案 1 :(得分:2)

这应该有效:

const unsigned char test[][4] = {{0x22,0x33},{0x22,0x33,0x44},{0x22,0x33,0x44,0x55},{0x22,0x33,0x45}};