Урок №16. Параметри і аргументи функцій

  Юрій  | 

  Оновл. 15 Кві 2020  | 

 228

В попередньому уроці ми розмовляли про функції і значення, які вона може повертати за допомогою оператора return. В цьому уроці ми дізнаємося, що таке параметри і аргументи функції.

Параметри і аргументи функції

У багатьох випадках нам потрібно буде передавати дані в функцію, що викликається, щоб вона могла з ними якось взаємодіяти. Наприклад, якщо ми хочемо написати функцію множення двох чисел, то нам потрібно якимось чином повідомити функцію, які це будуть числа. В іншому випадку, як вона дізнається, що на що множити? Тут нам на допомогу приходять параметри і аргументи.

Параметр функції — це змінна, яка використовується в функції і значення якої надає викликаюча функція. Параметри вказуються при оголошенні функції в круглих дужках. Якщо їх багато, то вони перераховуються через кому, наприклад:

Параметри кожної функції дійсні тільки всередині цієї функції. Тому, якщо і printValue() і add() мають параметр a, то це не означає, що станеться конфлікт імен. Ці параметри вважаються окремими і ніяк не взаємодіють один з одним.

Аргумент функції — це значення, яке передається з викликаючої функції в функцію, що викликається і яке вказується в круглих дужках при виклику:

Зверніть увагу, що аргументи також перераховуються через кому. Кількість аргументів має збігатися з кількістю параметрів, інакше компілятор видасть повідомлення про помилку.

Як працюють параметри і аргументи функцій?

При виклику функції, всі її параметри створюються як локальні змінні, а значення кожного з аргументів копіюється в відповідний параметр (локальну змінну). Цей процес називається “передача по значенню“, наприклад:

При виклику функції printValues() аргументи 8 і 9 копіюються в параметри a і b. Параметру a присвоюється значення 8, а параметру b — значення 9.

Результат:

8
9

Як працюють параметри і значення, що повертаються?

Використовуючи параметри і значення, що повертаються, ми можемо створювати функції, які можуть приймати і опрацьовувати дані, а потім повертати результат назад в викликаючу функцію.

Наприклад, ось проста функція, яка приймає два цілих числа і повертає їх суму:

При виклику функції add(), параметру a присвоюється значення 7, а параметру b — значення 8. Після цього функція add() обчислює їх суму і повертає результат назад в функцію main(), де він вже виводиться на екран.

Результат виконання програми вище:

15

Додаткові приклади

Розглянемо ще декілька викликів функцій:

Результат виконання програми вище:

15
20
25
8
7
6

З першими двома викликами все зрозуміло.

В третьому виклиці, параметрами є вирази, які спочатку потрібно опрацювати. 2 + 3 = 5 і результат 5 присвоюється змінній a. 4 * 5 = 20 і результат 20 присвоюється змінній b. Результатом виконання функції add(5, 20) є значення 25.

Наступна пара досить легка:

Тут уже a = x і b = x. Оскільки, x = 4, то add(x, x) = add(4, 4). Результат — 8.

Тепер розглянемо складніший виклик:

При виконанні цього стейтменту процесор повинен визначити значення параметрів a і b функції add(). З параметром a все зрозуміло — ми передаємо значення 1 (a = 1). А ось, щоб визначити значення параметра b, нам необхідно виконати операцію множення: multiply(2, 3), результат — 6. Після цього add(1, 6) повертає число 7, яке і виводиться на екран.

Коротше кажучи:

add(1, multiply(2, 3)) => add(1, 6) => 7

Останній виклик може здатися трішки складним через те, що параметром функції add() є інший виклик add():

Але тут все аналогічно прикладу вище. Перед тим як процесор визначить зовнішній виклик функції add(), він повинен опрацювати внутрішній виклик функції add(2, 3). add(2, 3) = 5. Після цього процесор опрацьовує функцію add(1, 5), результатом якої є значення 6. Потім 6 передається в std::cout на вивід.

Коротше кажучи:

add(1, add(2, 3)) => add(1, 5) => 6

Тест

Завдання №1: Що не так з наступним фрагментом коду?

Завдання №2: Які тут є дві проблеми?

Завдання №3: Який результат виконання наступної програми?

Завдання №4: Напишіть функцію doubleNumber(), яка приймає ціле число в якості параметра, множить його на 2, а потім повертає результат назад в викликаючу функцію.

Завдання №5: Напишіть повноцінну програму, яка приймає ціле число від користувача (використовуйте std::cin), подвоює його за допомогою функції doubleNumber() з попереднього завдання, а потім виводить результат на екран.

Відповіді

Щоб переглянути відповідь, клікніть на неї мишкою.

Відповідь №1

Функція multiply() має тип повернення void, що означає, що ця функція не повертає значення. Але так як вона все рівно намагається повернути значення за допомогою оператора return, то ми отримаємо помилку від компілятора. Функція повинна мати тип повернення int.

Відповідь №2

Проблема №1: main() передає один аргумент в multiply(), але multiply() має два параметра.

Проблема №2: multiply() вираховує результат і присвоює його локальній змінній, яку не повертає назад в main(). А оскільки типом повернення функції multiply() є int, то ми отримаємо помилку (в деяких компіляторах) або неочікувані результати (в інших компіляторах).

Відповідь №3

Функція multiply() приймає наступні параметри: a = add(3, 4, 5) і b = 5. Спочатку процесор опрацьовує a = add(3, 4, 5), тобто 3 + 4 + 5 = 12. Після цього вже виконує операцію множення, результатом якої стає число 60.

Відповідь: 60.

Відповідь №4

Відповідь №5

Примітка: У вас можуть бути і інші рішення завдань №4 і №5 — це ок. В програмуванні є багато випадків, коли одну задачу можна вирішити декількома способами.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (2 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *