2015-06-03 6 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

Укажите, что вы хотите сделать: скопируйте их в один 2d-массив или создайте массив [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])); 
}