Как вернуть массив из функции
- Войдите на сайт для отправки комментариев
Вс, 13/12/2015 - 13:53
Есть функция с одним входным int параметром.
Внутри фукнции деалется математика и получаются две int переменные, speedA и speedB.
Хотел вернуть массив, но на:
int speedArr[2] = {speedA,speedB};
return speedArr;
компилятор ругается: invalid conversion from 'int*' to 'int' [-fpermissive]
Как правильно вернуть их из функции?
Проверьте объявление функции. У вас не совпадает тип возвращаемого значения.
Проверьте объявление функции. У вас не совпадает тип возвращаемого значения.
я полагаю int должно быть?
я полагаю int должно быть?
Нет, должно быть
т.е. указатель на int.
Другое дело, что массив объявленный внутри функции, при выходе из функции перестает существовать. И использовать полученный указатель для доступа к уже не существующим переменным несколько экстремально.
Такие массивы надо объявлять через malloc(), не так как у Вас.
Проще передать указатель на массив вторым параметром и разделаться с ним любым способом.
И не передавайте из функции указатель на массив обявленный в ней. Это злобная ошибка! Обявите массив хотябы там, откуда вызываете функцию, передайте ей в параметре указатель на массив, в функции заполните значения в массиве.
Понятный для понимания, не достойный для повторения, однако работающий способ:
int Arr[2] = {3, 4}; void setup() { Serial.begin (9600); calc (Arr); Serial.println(Arr[0]); Serial.println(Arr[1]); } void loop() { } void calc (int Brr[]){ Brr[0] = 5; Brr[1] = 6; return; }А почему недостойный для повторения?
А потому что использует указатель по сути, но не по форме.
И вносит сумбур в восприятие переменных, передаваемых функции. Простые типы не будут претерпевать изменения, а массивы - будут.
Да и массив в этом случае лучше использовать очень маленький, а то другим переменным места не хватит ))
Опять не понял.
Да и массив в этом случае лучше использовать очень маленький, а то другим переменным места не хватит ))
Это относится к приведенному скетчу?
к Ардуино в целом?
просто шутка?
Опять не понял.
Не верю! ©
к Ардуино в целом?
просто шутка?
Да, Вы правы.
Это очень тонкая шутка - использование C++ для Arduino. ))
Дешево и очень сердито для вашей задачи
bool fn( int x, int & speedA, int & speedB ) { ...... return true; }Вызываем так
int a,b; if( fn( 25, a, b ) ) { .... }