Виклик функції - студопедія
Функції, які повертають результат за посиланням
У тих випадках, коли результат роботи функції представляється не одним, а кількома значеннями, повернення їх за допомогою оператора return стає неможливим, так як за визначенням він може повертати тільки одне значення. Більш того, в заголовку функції може бути записаний тільки один тип результату. а не кілька. Для таких випадків в С ++ передбачено інший вид функцій, званий функціями, які повертають результат за посиланням. У тілах цих функцій не використовується оператор повернення return, так як він не може бути використаний для повернення декількох значень.
Синтаксис заголовка функцій, які повертають результат за посиланням, має вигляд:
void ім'я (тип1 імя1, тип2 імя2, ..., тіпN імяN, тип1 імя1, тип2 імя2, ..., тіпN імяN)
Тут void - ключове слово, що означає порожньо;
тип1 імя1, тип2 імя2, ..., тіпN імяN - тип і ім'я вхідних даних;
тип1 імя1, тип2 імя2, ..., тіпN імяN - тип і ім'я вихідних даних.
Всі дані в дужках утворюють список параметрів. що складаються з імен абстрактних даних (які не мають значень).
Перед іменами вихідних даних ставиться знак (Амперсанд). Цей знак означає посилання на ту клітинку, яка виділена для змінної, позначеної цим знаком, і куди треба поміщати результат.
Оператор виклику функцій, які повертають результат за посиланням, має такий вигляд:
імя_функциі (імя1, імя2. імяN);
Тут імя_функциі - ім'я функції, що викликається;
(Ім'я, імя2. ІмяN) - список аргументів. що складається з імен як вхідних, так і вихідних даних, записаних в порядку відповідному списку параметрів. У цьому списку вхідні дані - реальні дані, що мають свої значення.
В С ++ прийнято всі змінні типу масив сприймати за замовчуванням як змінні за посиланням. Тому перед такими змінними в списку параметрів знак не ставиться.
На відміну від оператора функції, що повертає результат за значенням, оператор виклику функції, що повертає результат за посиланням, записується самостійним оператором, а не в якості операнда в складі іншого оператора.
Оператор виклику функції, що повертає результат за посиланням, в списку аргументів повинен мати таку ж кількість даних, як і списку параметрів (заголовку функції), а відповідні дані цих списків повинні бути однакових типів.
При виконанні функції, що повертає результат за посиланням, для змінних, використовуваних за посиланням (вихідні дані), осередки пам'яті в стек не виділяються. Після завершення роботи функції значення вихідних даних заносяться в їх осередки, виділені при описі, замість тих значень, які там були раніше. Таким чином, раніше існувала в них інформація, втрачається.
Як приклад функції, яка повертає результат за посиланням, може бути функція, яка визначає найменше та найбільше число ряду чисел a (N). Блок - схема і текст такої функції наведено нижче.
void minmax (float a (N), float min, float max)
if (a [i] if (a [i]> max) max = a [i]; У заголовку наведеної функції знаком (Амперсанд) позначені дві змінні min і max, які відіграють роль вихідних. В якості вхідної змінної використовується масив a (N). 15.3.3. Місце розташування функцій у програмі У зв'язку з тим, що в будь-якій програмі, написаної на алгоритмічній мові С ++, завжди має бути присутня головна функція main (), то розміщення спеціалізованих функцій розглядається по відношенню до неї. Можливі два варіанти розміщення функцій: - перед головною функцією, - після головної функції. У першому варіанті всі тексти спеціалізованих функцій розташовуються безпосередньо перед головною функцією. В цьому випадку слід мати на увазі, що спеціалізовані функції можуть викликатися не тільки головною функцією main (), але і викликати один одного. Якщо програмою передбачається виклик однією функцією іншу, то в цьому випадку текст викликається функції повинен бути поміщений раніше тексту викликає функції. При недотриманні цього правила піде повідомлення про помилку. Так як в тексті викликає функції компілятор «побачить» ім'я функції, якої він ще не зустрічав, і для нього вона буде сприйматися як невідома. Таке правило змушує програміста бути уважним і додатково напружуватися. Щоб виключити такі незручності, можна скористатися другим варіантом розміщення функцій. В цьому випадку всі тексти спеціалізованих функцій розташовуються після головної функції в будь-якій послідовності. Але щоб компілятор «не висловлював претензій» в разі неправильного взаємного розташування функцій, перед головною функцією поміщаються прототипи всіх спеціалізованих функцій. Прототип - це заголовок функції, що завершується крапкою з комою. Якщо виконати цю вимогу, то компілятор «побачить» всі ці функції, і в подальшому вони не будуть у нього «викликати непорозумінь». Приклад програми з використанням функцій. У заданій матриці a (M * N), де M = 5, а N = 8, необхідно визначити найменший і найбільший елемент. Алгоритм обчислень з використанням функцій є не одну блок-схему, а сукупність блок - схем окремих функцій. в тому числі і головної функції, яка об'єднує весь обчислювальний процес в єдине ціле. inmatr () // Функція введення матриці