Привіт друзі! З відео 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Припой з флюсом 1,0мм 10г

Припой з флюсом 1,0мм 10г

Припой олов'янно-свинцевий ПОС-60 (Ø1мм, 10г) в колбі з безвідмивочним флюсом призначений для з'єдна..

97.25грн.

Тестуємо WEB-інструмент програмування Arduino на офіційному сайті

Тестуємо WEB-інструмент програмування Arduino на офіційному сайті

Подивимось ближче на веб-редакторНа офіційному сайті  Arduino в розділі скачування засобів прог..

Датчик напруги мережі 220В

Датчик напруги мережі 220В

Гальванічно ізольований датчик наявності напруги мережі 220ВНапруга живлення логіки 3 ... 5 ВРозмір ..

106.67грн.

Використання внутрішнього Watchdog таймера в ESP32

Використання внутрішнього Watchdog таймера в ESP32

Використання внутрішнього Watchdog таймера в ESP32 Watchdog (WDT) — це вбудований таймер мікрокон..

Прото модуль для WeMos D1 mini

Прото модуль для WeMos D1 mini

Монтажний шилд під плату контролера WeMos D1 miniВ комплекті традиційно зібрані усілякі гребінк..

37.77грн.