Как изменить размер массива на Arduino после добавления нового элемента?

Вопросы:

1. Как изменить размер массива после добавления новых элементов, чтобы sizeof возвратил новый размер?
2. Как правильно объединить/дополнить массив, чтобы sizeof работал корректно?

Код C++ я новичок, прошу сильно не пинать)
  • 27 октября 2023 г. 14:18
Ответы на вопрос 7
В Arduino размер массива определяется на этапе компиляции и его нельзя изменить динамически по мере добавления новых элементов. 

Однако, вы можете использовать динамическую память, как показано в примере ниже:

```cpp
int* array;      // Указатель на массив
int arraySize;   // Текущий размер массива

void setup() {
  arraySize = 5;     // Начальный размер массива
  array = new int[arraySize];  // Выделение памяти для массива

  // Инициализация элементов массива
  for (int i = 0; i < arraySize; i++) {
    array[i] = i;
  }
}

void loop() {
  // Добавление нового элемента
  addElement(10);

  // Печать элементов массива
  for (int i = 0; i < arraySize; i++) {
    Serial.println(array[i]);
  }

  delete[] array;    // Освобождение памяти массива
  while (1);    // Бесконечный цикл
}

void addElement(int value) {
  // Создание нового временного массива, размер которого больше на 1
  int* tempArray = new int[arraySize + 1];

  // Копирование элементов из старого массива в новый
  for (int i = 0; i < arraySize; i++) {
    tempArray[i] = array[i];
  }

  // Добавление нового элемента в конец массива
  tempArray[arraySize] = value;

  delete[] array;  // Освобождение старой памяти массива
  array = tempArray;  // Присвоение указателю на новый массив

  arraySize++;   // Увеличение размера массива
}
```

В этом примере мы используем динамическую память для создания массива и добавления новых элементов. При добавлении нового элемента мы создаем новый временный массив большего размера, копируем в него элементы из старого массива, добавляем новый элемент и освобождаем память старого массива. Потом присваиваем указатель на новый массив указателю `array` и увеличиваем значение `arraySize` на 1.
data3[0] = data1[0];
data3[1] = data1[1];
data3[2] = data1[2];
data3[3] = data2[0];
data3[4] = data2[1]; 
 data3[0] = data1[0] 
 data3[1] = data1[1] 
 data3[2] = data1[2] 
 data3[3] = data2[0] 
 data3[4] = data2[1]
Похожие вопросы