
- •1 Основні елементи мови с
- •1.1 Алфавіт мови програмування
- •1.2 Лексеми
- •1.3 Ключові слова
- •1.4 Ідентифікатори
- •1.5 Класифікація типів даних
- •1.6 Літерали
- •1.7 Оператори
- •1.8 Коментарі
- •1.9 Директиви препроцесора
- •1.10 Організація програми
- •2 Операції та вирази
- •2.1 Загальні відомості
- •2.2 Арифметичні операції
- •2.3 Операції приведення типів
- •2.4 Операції присвоєння
- •2.5 Операції інкремента і декремента
- •2.6 Операції порівняння
- •2.7 Операції зсуву
- •2.8 Порозрядні операції
- •2.9 Логічні операції
- •2.10 Операція sizeof
- •2.11 Операція послідовного обчислення
- •2.12 Операція умови (?:)
- •2.13 Адресні операції
- •3 Прості типи даних
- •3.1 Оголошення змінних
- •3.2 Час існування та область видимості змінних
- •3.3 Цілі типи даних
- •3.4 Дійсні типи даних
- •4 Оператори керування
- •4.1 Оператор розгалуження if
- •4.2 Оператор розгалуження if-else
- •4.3 Оператор множинного розгалуження switch
- •4.4 Оператор циклу for
- •4.5 Оператор циклу while
- •4.6 Оператор циклу do while
- •4.7 Оператор break
- •4.8 Оператор continue
- •5 Функції
- •5.1 Основні поняття
- •5.2 Види виклику функцій
- •5.3 Область видимості
- •5.4 Порожній тип void
- •5.5 Передача аргументів у функцію
- •5.6 Рекурсивні функції
- •5.7 Прототипи функцій
- •6 Покажчики
- •6.1 Визначення та ініціалізація покажчиків
- •6.2 Визначення покажчиків
- •6.3 Масиви
- •6.4 Операції порівняння
- •6.5 Копіювання рядка
- •6.6 Покажчики на функцію
- •6.7 Покажчики на void
- •6.8 Арифметика покажчиків
- •7 Масиви
- •7.1 Загальні поняття
- •7.2 Одновимірні масиви
- •7.3 Багатовимірні масиви
- •8 Рядки в с
- •8.1 Рядки
- •8.2.Створення рядків
- •8.3 Прототипи
- •8.3 Функції перетворення буферів
- •8.4 Функції перевірки літер
- •8.5 Операції з рядками
- •9 Структури, об’єднання, перерахування
- •9.1 Структури
- •9.2 Бітові поля
- •9.3 Ключове слово typedef
- •9.4 Об’єднання
- •9.5 Перераховуваний тип
- •10 Введення та виведення даних
- •10.1 Функція виведення printf
- •10.2Функція введення scanf
- •10.3 Введення та виведення у файл
- •11 Динамічне виділення пам'яті
5.2 Види виклику функцій
Приклад 5.2. Види виклику функцій.
#include <stdio.h>
#include <stdlib.h>
int sub (int a, int b){
int q;
q=a-b;
return (q);
}
int main ()
{
int x=2, y=1, t;
t = sub(7, 4);
printf("First %i \n", t);
printf("Second %i \n", sub(7, 4));
printf("Third %i \n", sub (x, y));
t = 4 + sub(x, y);
printf("Fourth %i \n", t);
system("PAUSE");
return 0;
}
Результат роботи програми:
У прикладі 5.2 створена функція sub, яка повертає різницю значень аргументів. В програмі продемонстровано чотири варіанти виклику функції sub.
Перший варіант виклику:
t = sub(7, 4);
printf("First %i \n", t);
Другий варіант виклику:
printf("Second %i \n", sub(7, 4));
У цьому варіанті функція sub викликається в якості аргументу функції printf.
Третій варіант виклику:
printf("Third %i \n", sub(x, y));
У цьому варіанті замість числових літералів (7, 4) в якості аргументів функції sub виступають змінні x та y.
Четвертий варіант виклику:
t = 4 + sub(x, y);
printf("Fourth %i \n", t);
У цьому варіанті показано можливість роботи з функцією, як зі звичайною змінною такого ж типу, який повертає функція.
5.3 Область видимості
Видимість змінних, оголошених у функції обмежується тілом функції, тобто вони є локальними змінними функції і не можуть бути використані поза нею. Наприклад, у попередньому прикладі було б неможливо використовувати змінні a, b або q безпосередньо у функції main, так як вони є локальними змінними функції add. Крім того, було б неможливо використовувати змінну t у функції add, так як вона є локальною змінною функції main.
У випадку необхідності видимості змінної, як у межах функції так і поза нею, потрібно використати глобальну змінну. Для створення глобальної змінної потрібно її оголосити поза межами усіх функцій, в тому числі і функції main.
5.4 Порожній тип void
Визначення функції починається з типу даних значення, яке буде повертатися функцією. Але, якщо не потрібно повертати жодного значення, то використовується порожній тип void.
Наприклад, потрібно створити функцію, яка виводитиме повідомлення на екран. Такій функції не потрібно повертати жодного значення.
Приклад 5.3. Використання порожнього типу void.
#include <stdio.h>
#include <stdlib.h>
void message () /* функція яка не повертає та не
приймає значень*/
{
printf("THIS IS SPARTA!!!\n ");
}
int main ()
{
message ();
system("PAUSE");
return 0;
}
Результат роботи програми:
В списку параметрів функції також може використовуватися void, для показу того, що функція не має параметрів при виклику. Наприклад, функція message могла бути визначена як:
void message (void)
{
printf("THIS IS SPARTA!!!\n");
}
Хоча не обов'язково вказувати void в списку параметрів. У мові C список параметрів може бути порожнім, якщо не потребує жодних параметрів. Дужки писати необхідно, навіть за відсутності параметрів. Їх наявність вказує на те, що це виклик функції, а не ім'я змінної або інший оператор мови C.
message();
5.5 Передача аргументів у функцію
Аргументи у функцію можуть бути передані за значенням (by value).
Приклад 5.4. Передача параметрів за значенням.
int x = 7, y = 4, t;
t = add(x , y);
У функцію add передаються значення змінних х і у, тобто 7 і 4 відповідно (рис. 5.3).
Рисунок 5.3 – Передача параметрів у функцію за значенням.
При виклику функції add, у локальні змінні a і b копіюються значення змінних x і y. Тому будь-яка зміна значень a або b в межах функції add, не вплине на значення змінних х і у.