Поменять местами два массива (используя указатели, а не копирование)

У меня есть два массива, определенные как:

uint8_t array1[10];
uint8_t array2[10];

Я хотел бы поменять местами массивы (фактически указатели на каждый массив), используя такой код:

uint8_t *tmp = array1;
array1 = array2;
array2 = tmp;

Однако я продолжаю получать такие ошибки, как:

invalid array assignment

для последних двух строк. Я не помню, чтобы это было такой проблемой в традиционном С++. Я пробовал все виды литья безрезультатно. Я что-то упустил?

Я могу заставить код работать правильно, если изменю объявления для массивов на использование new и сделаю так, чтобы они были просто более или менее указателями, а не массивами, но я бы не хотел этого. нужно сделать это:

uint8_t *array1 = new uint8_t[10];
uint8_t *array2 = new uint8_t[10];

Код выполняется на базе ARM SAMD51 (процессор Cortex M4).

Спасибо за любые советы!

, 👍0


1 ответ


Лучший ответ:

2

Разобрался. Хотя использование new работает, я хотел, чтобы буферы не попадали в кучу. Следующие объявления работают с кодом подкачки:

uint8_t a1[10];
uint8_t a2[10];
uint8_t *array1 = a1;
uint8_t *array2 = a2;

uint8_t *tmp = array1;
array1 = array2;
array2 = tmp;
,