2015-06-03 52 views
2

我有四個uint8_t陣列:陣列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。

爲什麼? 我怎樣才能正確地將它們添加到數組?

+0

請指定您想要做的:將它們複製到單個二維數組中,或者創建這些數組[指針]的數組[4]。 「添加」在這裏的含義太廣泛。 (兩種策略已經回答了,順便說一句)。 – user3125367

回答

4

頂層陣列應該只是一個指針數組:

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

你會失去大約每個「行」的長度的信息,但是這很好。

我不認爲你可以像在你的例子中那樣在初始化器中引用一個數組,並且將這些元素自動地複製到一個更大的數組中。

1

您正在嘗試初始化uint8_t數組指向uint8_t,不uint8_t元素。

試試這個:

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

你必須每個陣列使用標準功能memcpy在頭<string.h>聲明的結果數組中複製。例如:

#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])); 
}