Привет друзья! Из видео Arduino функции мы уже знаем, что в функцию можно передавать много переменных, а возвращать она может: или ничего (тип void), или только одну переменную с типом, указанным при объявлении функции. Но что делать, если есть необходимость возвращать из функции две и более переменных?


Для решения этой задачи есть несколько способов. Сейчас мы их рассмотрим.

Самый простой вариант – это использование глобальных переменных внутри функции.


Создаем глобальные переменные a и b типа integer. И внутри функции my_func проводим над ними математические манипуляции. 

При каждом вызове функции обе переменные a и b будут изменяться. При этом способе функция изменяет значения только конкретных глобальных переменных, и не идет речь о возвращении разных переменных при множественном обращении к функции в программе. То есть, если в этом примере нужно будет изменять значения параллельно, и у других переменных, например, c и d при помощи существующей функции, то напрямую это не получится.

Результат выполнения этого скетча на мониторе порта. Здесь первая переменная увеличивается, а вторая уменьшается на единицу.

Способ прост в понимании и использовании, но мало функционален.

Более изящный способ – это передача значений переменных функции по ссылке. Для переменных, которые вы хотите изменить. Здесь уже глобальные переменные не обязательны. Основная идея здесь, что функция может возвращать некоторые входные переменные уже с изменённым значением.


Чтобы обозначить такую входную переменную, значение которой нужно изменять, необходимо просто поставить значек & перед названием принимающей переменной при объявлении функции.

Функция будет изменять значения входных переменных. Если при вызове функции передать ей переменные a и b, то она произведет с ними вычисления и присвоит им новые значения. Здесь в примере первая переменная увеличивается на единицу, а вторая уменьшается на единицу при каждом вызове функции. Входная переменная может использоваться в этом случае и как входная информация и как ячейка для хранения выходной информации.

Результат выполнения данного примера в окне монитора порта. Здесь при первом вызове функции изменились значения переменных a и b. А дальше циклично изменяются значения второй пары переменных.

Этот способ сложнее для понимания, но максимально удобен и гибок. Подходит для большинства задач. Он действительно крут!

Третий способ – это применение структуры в типе функции. Таким образом из функции можно возвращать много переменных различного типа. Структура – это пользовательский тип данных, который может состоять из множества обычных стандартных типов данных.


Сначала объявляется структура под названием my_Struct. В ней место под две переменные типа integer. Здесь потенциально может быть много переменных различного типа.

Потом идет объявление переменной datas с созданным нами типом my_Struct.

Функцию объявляем тоже с типом my_Struct. И в самой функции тоже нужно объявить переменную типа my_Struct, которая будет передаваться наружу через операнд return.

Вызов функции вставлен в loop(). Здесь функция с типом нашей структуры передает значения двух переменных типа integer, запакованные в структуру.

Результат выполнения такого скетча выведен в монитор порта.


Данный способ будет полезен в проектах, где целесообразно использовать структуры данных для описания свойств объектов.

Мне же больше всего нравится второй способ – передача параметров по ссылке . Он самый функциональный. А самый высокий пилотаж в программировании – это наверно комбинация первого и  второго способов передачи нескольких переменных из функции, плюс обычная передача одной переменной, чтобы отобразить удачное выполнение функции или неудачное.



Желаю вам достичь космических высот в изучении и применении языка C. И применить эти знания на практике с пользой для себя и окружающих. Спасибо за внимание и до новых встреч!

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Терминальный модуль для Wemos D1 mini

Терминальный модуль для Wemos D1 mini

Модуль для установки Wemos D1 mini с винтовыми клеммниками.Имеет выход шины I2C нормализованный под ..

162.43грн.

Уроки Arduino структура программы для начинающих

Уроки Arduino структура программы для начинающих

Здравствуйте друзья! Вы большие молодцы, что заинтересовались уроками Arduino! Структура програ..

ESP32 и Telegram-бот: удалённое управление через интернет

ESP32 и Telegram-бот: удалённое управление через интернет

ESP32 и Telegram-бот: удалённое управление через интернет Микроконтроллер ESP32 обладает встрое..

Шестерня для зубчатого ремня на 30 зубьев под ось 5 мм

Шестерня для зубчатого ремня на 30 зубьев под ось 5 мм

Используется для передачи и редукции крутящего момента от двигателя до оси 5 ммКоличество зубьев 30 ..

79.88грн.

Озвучка тира Arduino Nano и MP3-проигрыватель

Озвучка тира Arduino Nano и MP3-проигрыватель

Постановка задачиЗадачей проекта является изготовление устройства озвучивания выстрелов 6-ти единиц ..