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

Модуль годинника реального часу DS3231SN

Модуль годинника реального часу для різних плат мікроконтролерівХарактеристики:- інтерфейс: I2C , ма..

150.59грн.

Arduino Nano I2C зв'язок між контролерами

Arduino Nano I2C зв'язок між контролерами

Давайте розберемося щодо найзручнішої комунікації фізично закладеної в контролери Arduino I2C це по..

Розробка електроніки під замовлення (схема + плата + прошивка)

Розробка електроніки під замовлення (схема + плата + прошивка)

Розробка електроніки під замовлення (схема + плата + прошивка) Якщо вашому бізнесу потрібен еле..

ESP32 LED PWM: частоти та роздільна здатність ШІМ (LEDC)

ESP32 LED PWM: частоти та роздільна здатність ШІМ (LEDC)

ESP32 LED PWM Controller: керування яскравістю світлодіодів ESP32 має вбудований модуль LED PWM C..

Модуль 6 — Вивід інформації: LCD 1602, OLED і термометр з екраном

Модуль 6 — Вивід інформації: LCD 1602, OLED і термометр з екраном

Модуль 6 — Вивід інформації (курс для початківців) Мета модуля: навчитися підключати та вик..