uint8_t 个数组

Array of uint8_t arrays

我有四个 uint8_t 数组:

uint8_t arrayOne[12]   = { 0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x01,0xC1,0x00,0x01 };

uint8_t arrayTwo[12]   = { 0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x4E,0x2D,0x00,0x0C };

uint8_t arrayThree[12] = { 0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x01,0xF3,0x00,0x01 };

uint8_t arrayFour[12]  = { 0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x20,0x04,0x00,0x01 };

我希望它们添加到另一个数组中:

uint8_t theArray[4][12] = { arrayOne,arrayTwo,arrayThree,arrayFour };

但是当我将它们添加到 theArray 时,数组的值发生了变化。

为什么? 如何将它们正确添加到数组中?

顶级数组应该只是一个指针数组:

uint8_t *theArrays[] = { arrayOne,arrayTwo,arrayThree,arrayFour };

您将丢失有关每个 "row" 长度的信息,但这没关系。

我认为您不能像示例中那样在初始化程序中引用数组并将元素自动复制到更大的数组中。

您正在尝试初始化 uint8_t 数组,其中 指向 uint8_t,而不是 [=15] =]uint8_t个元素.

试试这个:

uint8_t *theArrays[] = { array1,array2, ... };

您必须使用 header <string.h> 中声明的标准函数 memcpy 复制结果数组中的每个数组。例如

#include <string.h>
#include <stdint.h>

//...

uint8_t * arrayPtrs[] = { arrayOne, arrayTwo, arrayThree, arrayFour };

for ( size_t i = 0; i < sizeof( theArray ) / sizeof( *theArray ); i++ )
{
    memcpy( theArray[i], arrayPtrs[i], sizeof( theArray[i] ) );
}