Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

8.4 Питання для контролю і самостійної роботи

  1. Дайте визначення покажчику.

  2. Який синтаксис оголошення покажчика ?

  3. З якими модифікаторами може бути використаний покажчик ?

  4. Скільки пам’яті займають покажчики ?

  5. Чим відрізняється ( * ) в оголошенні покажчика й у виразу, де він використовується ?

  6. Що таке операція звертання за адресою або разадресація ?

  7. Що таке операція узяття адреси ?

  8. Чи можливо і як привласнити адресу речовинної перемінної salary покажчику на тип int з ім'ям psal ?

  9. Чи обов'язково виконувати ініціалізацію покажчика при його оголошенні?

  10. У чому особливості використання покажчика на тип void ?

  11. Для чого застосовується константа NULL ?

  12. Який тип має ім’я масиву і яку адресу воно вміщує ?

  13. Чи може покажчик адресувати масив символів ?

  14. Чи можливо виконувати ініціалізацію покажчика рядком символів ?

  15. Чи можливо привласнювати покажчики одного типу ?

  16. Чи можуть відніматись покажчики одного типу і який тип має результат ?

  17. З перемінними якого типу можливо складати покажчики ?

  18. Як здійснити явне приведення типу покажчика ?

  19. Поясніть приклади, приведені в теоретичній частині, які значення мають перемінні ?

  20. Що таке динамічне виділення пам'яті, де вона виділяється і за допомогою яких функцій ?

  21. Який синтаксис оголошення функцій динамічного виділення пам'яті ?

  22. Який синтаксис функції звільнення динамічно виділеної пам'яті і для чого це треба робити ?

9 Заняття № 9

Масиви. Селективна обробка масивів

(2 години)

Ціль роботи: вивчити роботу з масивами як складеними типами даних, ознайомитися з прийомами введення і виведення даних, обробки одномірних масивів.

9.1 Теоретичні відомості

Масив - це набір об'єктів (елементів) однакового типу, доступ до яких здійснюється за індексом в масиві. Звертання до масивів та їх елементів у С реалізовано за допомогою покажчиків (pointers).

Масив у С можна оголосити в такий спосіб:

[ <Клас_пам'яті ] Тип_даних Ім'я_масиву> [ <Розмір_масиву> ]

Розмір_масиву може бути заданий константним виразом.

Доступ до елементів масиву відбувається в такий спосіб:

<Ім'я_масиву> [ <Значення_індексу> ]

Використовуючи ім'я масиву й <Значення_індексу> від 0 до значення Розмір_масиву - 1, тобто на одиницю менше, ніж максимальне значення індексу, можна звернутися до необхідного елементу масиву.

Приклади оголошення масивів:

char name[20];

int grad[125];

float b[30];

Масив має ім'я (<Ім'я_масиву>), що є покажчиком на тип елементів масиву й адресує перший елемент з індексом (). Ім'я масиву фактично є константним покажчиком, що посилається на початкову адресу даних, з якої послідовно розташовані елементи масиву, і може бути використане як покажчик. Звертання до елементів може здійснюватися в такий спосіб: name[0] -1-й елемент масиву, name[1]- 2-й елемент, name[19] – останній 20-й елемент.

При трансляції програми компілятор відводить місце під оголошений масив статично, тобто в області даних. Ділянка пам'яті, яка виділена для масиву, не може динамічно змінюватись. Розмір виділеної для масиву пам'яті Розмір_пам'яті можна визначити в байтах за наступною формулою:

Розмір_пам'яті = sizeof( <Тип_елементу> ) * Розмір_масиву

Елементи масиву розміщуються в пам'яті послідовно, тобто кожна наступна комірка пам’яті розташована відразу після попередньої.

Ініціалізація елементів масиву може бути явною. Якщо декілька елементів не ініціалізовані, то останні елементи масиву дорівнюють 0. Ініціалізація масиву символів може виконуватись рядком символів і показана раніше у занятті № 8.

У С не включені оператори, що здійснюють роботу з масивами, як стандартними типами даних. Щоб скопіювати дані з одного масиву в інший, необхідно організувати функцію з циклом, тіло якого повинно мати наступний вигляд:

# define rasm 20 //rasm - розмір масивів

іnt mas2[rasm];

іnt mas1[rasm] = {15, 37, 10, -20, -10, 25, 22}; //Явна ініціалізація

//елементів масиву з 0 по 6, з 7 по 19 всі дорівнюють 0

for( i = 0; i < rasm; i++ ) mas2[ i ] = mas1[ i ];