називається сукупність однотипних даних або функцій, позначених одним іменем. Це чи не найпоширеніший тип даних у програмуванні, а оскільки для обробки масивів найчастіше використовуються цикли, вони різко підвищують ефективність використання комп’ютерної техніки.
З курсу лінійної алгебри відомо, що за вимірністю масиви бувають одновимірні (вектор), двовимірні (матриця), тривимірні (тензор) і т.д. У програмуванні найчастіше використвуються одновимірні та двовимірні масиви. Більшість сучасних мов програмування дозволяють обробляти масиви будь-якої вимірності. Мова Сi відрізняється від них тим, що дозволяє використовувати тiльки одновимiрні масиви даних, а багатовимірні розглядаються як одновимірні масиви одновимірних масивів. Це, однак, як буде показано нижче, не є її недоліком, а навпаки надає їй ширших можливостей.
Так само, як прості, дані складних типів підлягають оголошенню в програмі. Ознакою масиву пiд час його оголошення є квадратнi дужки, якi ставляться пiсля iдентифiкатора масиву, в дужках вказується кiлькiсть елементiв масиву. Мiнiмальне значення iндекса (порядкового номера) елемента масиву завжди дорiвнює нулю. Це відрізняє Сі від інших мов програмування таких, як Паскаль, Бейсик, де початковий номер елемента можна змінювати. Пiд час оголошення масив може бути iнiцiалiзований.
8.6. Вказівники.
Вказівник являє собою комірку пам’яті типу адреси, в яку можна записати адресу об’єкта. Для роботи з вказівниками використовуються операції адресації та непрямої адресації, розглянені в розділі 2.6.
Вказівники знайшли широке застосування для роботи з масивами, більше того, ідентифiкатор масиву сприймається компiлятором, як адреса його першого елемента, тому фрагменти
float *p, m[7]; p=&m[0]; та
float *p, m[7]; p=m;
виконаються однаково. Тут p – змінна адресного типу, вона приймає значення адреси першого елемента масиву m.
Застосування вказівника замість імені масиву можливе, однак, лише під час обробки одновимірних масивів. Вище було вже сказано, що багатовимірний масив мовою Сі розглядається, як одновимірний масив одновимірних масивів, а, оскільки ім’я масиву є вказівником на масив, то воно є масивом вказівників на одновимірні масиви.
8.7. Процедури та функції.
Процедура являє собою підпорядковану програму. Вона має такі області застосування:
–
структуризація програми. Як правило, велика програма розв’язує декілька підзадач. Якщо кожну з них оформити у вигляді декількох підпрограм, то їх легше буде читати та налагоджувати. Це особливо вигідно й при програмуванні однієї задачі декількома програмістами;
–
уніфікація обчислювального процесу. Часто підзадачі бувають однотипними, наприклад, коли треба розв’язати декілька різних рівнянь одним і тим же методом у різних місцях програми. Звичайно, що з метою недопущення повторення програмного коду таку задачу слід оформити у вигляді відпрограми, до якої звертатися з різними значеннями коефіцієнтів рівняння з різних місць програми;
–
створення бібліотеки програм для їх повторного використання.
Підпрограма характерна наявністю вхідних (тих, які вона одержує з головної програми) та вихідних (тих, які вона повертає в головну програму) параметрів. Вхідні параметри називаються дійсними на рівні оператора виклику підпрограми у головній програмі та формальними в переліку параметрів на стороні підпрограми. Під формальні параметри пам’ять дублюється і вони локалізовані в підпрограмі; після закінчення виконання підпрограми зайнята ними пам’ять звільняється (повертається в загальний пул) і може бути використана іншими підпрограмами. Але, це не стосується даних класу пам’яті static, які можна прочитати повторно при наступному звернення до процедури.
В залежності від кількості параметрів розрізняють два типи підпрограм: процедура-підпрограма і процедура-функція. Функція так само, як підпрограма, може мати багато вхідних параметрів, але, на відміну від неї, видає тільки один результат.
Функцiя. Мова Сi дозволяє використовувати лише функцiю, причому її параметрами не можуть бути масиви. Але це її не збіднює, за рахунок використання вказівників вдається обробляти необмежену кількість будь-яких даних. Зрозуміло, що дані, передані вказівниками на них, стають глобальними – вони не дублюються в процедурі і займуть одну й ту ж область пам’яті, задану в головній програмі. З метою попередження помилок глобальні параметри, які не підлягають зміні в процедурі, слід описувати за допомогою модифікатора const.
Головна програма мовою Сі – теж функція. Вона може бути запущеною на виконання іншою функцією, найчастіше – операційною системою, і приймати вхідні параметри, та повертати значення. Якщо це значення дорівнює 0, то це означає, що вона закінчилася успішно, інакше – одиницю. Зауважимо, що ці ж значення (0 або 1) повертає функція exit() при примусовому завершенні програми.
Є три види роботи з функціями: оголошення, визначення і звернення (використання). Програма мовою Сі належить до багатофайлових програм, тобто всі або частина її функцій можуть знаходитися в різних файлах, тому функції повиннi бути оголошенi в головнiй або пiдпорядкованих програмах. Незалежно від місця оголошення кожна функція є глобальною, тобто доступною всім. Якщо вся програма разом з підпорядкованими функціями знаходиться в одному й тому ж файлі, то їх спеціально можна й не оголошувати. Тоді визначення, тобто сам текст функції, поміщають за межами блоку на початку головної програми.
Оголошення процедури-функцiї називають ще прототипом функції, воно має такий вигляд:
ТФ IФ(СТ);
де ТФ – тип функції або тип значення, яке повертає процедура-функцiя;
IФ – iм’я процедури-функцiї, iдентифiкатор;
СТ – список типiв параметрiв.
Визначення функцiї має вигляд:
ТФ IФ(СПТ){ОВЗ; ТілоФ;}
де СПТ – список формальних параметрiв i їх типiв;
ОВЗ – оголошення внутрiшнiх (власних) змiнних функцiї;
ТілоФ – тiло функції, оператори та вирази.
Звертання до процедури-функції відбувається так само як до стандартних функцій – шляхом вказання у потрібному місці програми такого виразу:
IФ(СД),
де СД – список дійсних параметрів.
Тiло процедури-функцiї може мiстити один або декiлька операторiв return(вираз); Його виконання спричиняє завершення процедури