правильно ли написана функция

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017
//Передаем сам массив и количество элементов в нем
unsigned char Sum(unsigned char *Array, unsigned char Len) 
{
        //Делаем тут что то c данными массива


        // Добавляем пару байт в массив и возвращаем его
  	Array[Len] = BitLow;     
  	Array[Len+1] = BitHigh;
  	return *Array;
}

вроде работает, но кажется я что то упустил

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Конечно. Почитать учебник по Си. Размеры массивов задаются только один раз при объявлении. И эти размеры уже не меняюся. И контроля за размерами в Си нет.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

А как мне тогда добавить еще несколько элементов в уже существующий массив?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Объявляй массив заранее с нужным количеством элементов.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

просто по уарту могут прийти разные массивы, с разным количеством элементов

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/*Main*/
//--------------------------------
//---Компоновка-----------------------------
char *Sum;//<-- это указатель
//---main-----------------------------
int main() {
  init();
  //setup()
  Serial.begin(9600);
  Sum = new char[10]; // Вот теперь считайте что у вас есть массив на 10 элнментов
  Sum[0] = '0';;
  Serial.println(Sum[0]);
  // надо больше  удаляем старый и получаем новый
  delete[] Sum;
  Sum = new char[20]; // теперь на 20 ячеек
  Sum[0] = '^';
  Serial.println(Sum[0]);
  for (;;) {
    //loop()
  }
  return 0;
}
/*Скетч использует 2084 байт (6%) памяти устройства. Всего доступно 30720 байт.
  Глобальные переменные используют 198 байт (9%) динамической памяти, оставляя 1850 байт для локальных переменных. Максимум: 2048 байт.
*/

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

semaawp пишет:

вроде работает

 :) 

Мухоморы можно кушать, но только один раз :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qwone, Вы по случаю восресенья немного приняли на грудь? И поди не закусывали?

  // надо больше  удаляем старый и получаем новый
  // ПОПУТНО ВЫБРАСЫВАЯ НАХ ВСЕ ДАННЫЕ, 
  // КОТОРЫЕ УСПЕЛИ НАКОПИТЬСЯ К ЭТОМУ МОМЕНТУ
  delete[] Sum;
  Sum = new char[20]; // теперь на 20 ячеек
 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/*Main*/
//--------------------------------
//---Компоновка-----------------------------
unsigned int size = 10;
char *Sum = new char[size];
void resize(unsigned int size_) {
  char *Sum_ = new char[size_];
  for (unsigned int i = 0; i <= size; ++i) {
    Sum_[i] = Sum[i];
  }
  delete[] Sum;
  Sum = Sum_;
}
//---main-----------------------------
int main() {
  init();
  //setup()
  Serial.begin(9600);
  strcpy(Sum, "qwerty");
  Serial.println(Sum);
  resize(20);
  Serial.println(Sum);
  for (;;) {
    //loop()
  }
  return 0;
}
/*Скетч использует 2154 байт (7%) памяти устройства. Всего доступно 30720 байт.
  Глобальные переменные используют 204 байт (9%) динамической памяти, оставляя 1844 байт для локальных переменных. Максимум: 2048 байт.
*/

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

qwone, ты слышал когданить про побочный эффект функции, и почему, еще со времен Фортрана, его надо стараца избегать?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

DetSimen пишет:

qwone, ты слышал когданить про побочный эффект функции, и почему, еще со времен Фортрана, его надо стараца избегать?

О какой фобии вы мне хотите сказать. То что на Фортране был интерплетатор, а здесь компилятор, да который лишнее простро выкидывает вы можно забыли.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qwone пишет:

 на Фортране был интерплетатор

Вы больше никому этого не говорите, а то ... чего доброго :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

qwone, спасибо. Давно так не ржал. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

qwone пишет:

на Фортране был интерплетатор

Правильно говорят: век живи - век учись.

Оказывается, и по истечениии 40 лет использования Фортрана, можно узнать о нем что-то новое...