Поменять местами два массива (используя указатели, а не копирование)
У меня есть два массива, определенные как:
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).
Спасибо за любые советы!
@Andrew M., 👍0
1 ответ
Лучший ответ:
Разобрался. Хотя использование 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;
- Работает с gcc, но не с Arduino. ошибка: taking address of temporary array
- Передача массивов, глобальных массивов внутри функций, указателей и объявление размеров массивов.
- Установка указателя массива на null при объявлении
- Почему я не могу получить размер массива указателей
- Передача двумерного массива в функцию
- передача массивов через функцию возвращает неправильные значения
- Можно ли создать массив для функций?
- Создание массива структур, в которых хранятся растровые изображения для работы с u8glib.