
- •Вбудовані функції. Мета застосування. Правила створення.
- •Препроцесор. Директива включення.
- •Препроцесор. Створення символічних констант та макросів.
- •Порівняльна характеристика макросів та вбудованих функцій.
- •Умовна компіляція програми. Директиви умовної компіляції. Приклади.
- •Поняття вказівника. Оголошення та ініціалізація. Мета використання.
- •Вирази та арифметичні дії над вказівниками.
- •Зв’язок масивів та вказівників. Обробка одновимірних масивів за допомогою вказівників. Приклади.
- •Вказівники. Вказівники як аргументи функцій та результати функцій.
- •Передача параметрів у функції за значенням та посиланням. Порівняльна характеристика.
- •Створення та обробка динамічних масивів. Видалення та вставка елементів у динамічний масив.
Умовна компіляція програми. Директиви умовної компіляції. Приклади.
Умовна компіляція це вибіркова компіляція лише тих частин програми, які задовільняють певні умови. Для умовної компіляції використовуються такі директиви препроцесора: #if, #else, #endif, #ifdef, #ifndef.
Синтаксис директиви умовної компіляції:
if - заголовок
текстові рядки для випадку “істина”
#else
текстові рядки для випадку “не істина”
#endif
if - заголовок містить умови, на основі яких здійснюється перевірка. Управляючий рядок if - заголовок має 3 форми:
1. #if вираз, що має постійне значення;
2. #ifdef ідентифікатор;
3. #ifndef ідентифікатор.
В першій формі вираз визначається значенням нуль або не нуль (“істина”, “не істина”.
В другій формі значення “істина” відповідає умові, якщо ідентифікатор був визначений в директиві #define.
В третій формі значення “істина” відповідає умові, якщо ідентифікатор або не був визначений в директивою #define, або був відмінений директивою #undef.
Для прикладу умовної компіляції приведемо такий фрагмент програми:
#ifndef MAX_STK
#define MAX_STK 128
#endif
Ідентифікатор MAX_STK має значення по замовчуванню, якщо не буде заданий користувачем.
Директива if подібна до оператора if у мові C:
#if SYS= = “IBM”
#include “ibm.h”
#endif
Якщо вираз SYS= = “IBM” істина, то під’єднується файл “ibm.h”.
Поняття вказівника. Оголошення та ініціалізація. Мета використання.
У мові C++ передбачені можливості роботи з символічними адресами пам'яті, у всякий розташований об'єкт програми. Для цього вводитися поняття вказівника.
Константа типу вказівник визначає безпосереднє значення адреси будь-якої змінної, тобто оперативної пам'яті. Вказівник- змінна (або просто вказівник) — це змінна, призначена для зберігання адреси об'єкта певного типу. У мові C++ визначені дві спеціальні операції для доступу до змінних через вказівники: операція & і операція *. Результатом операції & є адреса об'єкта, до якого операція застосовується. Якщо ім'я змінної, використовуваної у програмі prt, то, додаючи перед ім'ям операцію визначення адреси &prt, отримаємо адресу цієї змінної пам'яті. Оператор y=&prt; присвоює адресу prt змінної у. Операція * — це операція звернення до змісту пам'яті за адресою, що зберігається в змінній вказівнику, або рівному вказівнику-константі. Наприклад, оператор х=*у; присвоює х значення змінною, записаною за адресою у. Якщо y=&prt; і х=*у;, то x=prt;.
Змінна типу вказівник може приймати у процесі виконання програми будь-які значення констант типу вказівник. Вона повинна бути обов'язково описана у такій формі: <тип змінної> * <ім'я змінної>;
де тип — це будь-який допустимий тип (базовий тип вказівника), а ім'я — це ім'я змінної-вказівника. Базовий тип вказівника визначає тип змінної, на яку вказує вказівник.
Наприклад, int *р; змінна р являє собою вказівник на тип цілий тип.
char *t; оголошується вказівник з ім'ям t, який вказує на змінну типу char.
Можна змішувати оголошення вказівників і звичайних змінних в одному рядку. Наприклад, int х, *у;
Оголошує х як змінна цілого типу, а у — як вказівник на ціло- чисельний тип.
Вказівний тип у С/С++. Операції над вказівниками.
Кожне визначення змінної чи константи програми супроводжується виділенням ділянки пам’яті для неї. Розмір ділянки залежить від типу даних. Кожен байт оперативної памяті має унікальний номер(ціле число 1). Номер комірки(байта памяті) називають ще її адресою. Адреса певного типу це адреса самого першого байта даного(самого лівого).
Нехай маємо наступне визначення int number =123; // 4 b
Щоб отримати адресу даного користуймося унарною операцією – амперсант, позначається &. Cout<<&number; //1000.
Змінні, які можуть містити адреси називаються Вказівники.
Вказівники поділяють на 2 групи 1)типовані(тип*) 2)безтипові - void вказівники(войд*) універсальні
Типізовані вказівники пов’язані з певним типом, тобто можуть містити адресу тільки даного певного типу. Вказівники на int можуть зберігати адреси змінних типу інт. Інт*.
Войд вказівники не пов’язані з певним типом і тому можуть зберігати адресу даного будь-якого типу. Войд*
Визначення типізованого вказівника має вигляд:
Тип*Імя вказівника1*Імя вказівника 2;
Int *a(вказівник), b(типова змінна), c(типова змінна);
Унарна операція зірочка називається розіменування вказівника.
Операція розіменування дозволяє отримати доступ до даного через вказівник на ньому.