
- •12. Класи пам'яті даних 100
- •13. Робота з файлами 106
- •14. Посилання 111
- •Склад мови
- •Алфавіт мови
- •Лексеми
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Символьні рядки
- •Знаки операцій, роздільники, коментарі
- •Типи даних
- •Класифікація типів даних
- •Цілочислові типи
- •Дійсні типи
- •Оголошення змінних і констант
- •Переліки
- •Структура програми
- •Функція main
- •Область дії змінної
- •Введення і виведення даних
- •Функції стандартної математичної бібліотеки
- •Вирази і операції
- •Поняття виразу, операнда, операції
- •Порядок виконання операцій
- •Арифметичні операції
- •Порозрядні операції
- •Операції порівняння
- •Логічні операції
- •Операції присвоєння
- •Умовна операція
- •Операція визначення розміру sizeof
- •Узгодження типів у виразах
- •Умовні оператори
- •Оператори
- •Умовний оператор if
- •Оператор вибору switch
- •Оператори циклу
- •Цикл з параметром. Оператор for
- •Цикл з передумовою. Оператор while
- •Цикл з постумовою. Оператор do while
- •Оператори переходу
- •Використання псевдовипадкових чисел
- •Одновимірні масиви
- •Багатовимірні масиви
- •Символьні рядки
- •Вказівники
- •Оголошення вказівника, операції, пов’язані з вказівниками
- •Адресна арифметика
- •Void – вказівники, типізація вказівників
- •Звертання до елементів масивів через вказівники
- •Масиви символьних рядків і масиви вказівників
- •Динамічне виділення пам’яті
- •Структури і об’єднання
- •Оголошення і ініціалізація структур
- •Звертання до елементів структур
- •Перейменування типів
- •Об’єднання
- •Поля бітів
- •Директиви препроцесора
- •Призначення директив препроцесора
- •Директива включення #include
- •Директиви макропідстановок #define I #undef
- •Директиви умовної компіляції
- •Директиви #ifdef, #ifndef
- •Функції
- •Структура функції
- •Виклик функцій. Прототипи функцій
- •Взаємодія фактичних і формальних параметрів функцій
- •Inline – функції
- •Масиви і символьні рядки як параметри функцій
- •Використання кваліфікатора const в оголошеннях параметрів
- •Багатовимірні масиви як параметри функцій
- •Опрацювання структур у функціях
- •Вказівники на функції
- •Рекурсивні функції
- •Класи пам'яті даних
- •Клас пам'яті, час існування і видимість об’єкта
- •Область дії глобальних і локальних змінних
- •Специфікатори класів пам'яті
- •Специфікатори глобальних змінних
- •Багатофайлові програми
- •Робота з файлами
- •Звертання до файлів
- •Послідовний запис до файлу і послідовне читання з файлу
- •Файли з довільним доступом
- •Посилання
- •Призначення посилань
- •Передача аргументів функцій як посилань
Типи даних
Класифікація типів даних
Кожна одиниця даних програми, тобто кожна змінна і кожна константа, має певний тип. Тип даних визначає обсяг оперативної пам'яті, яка буде виділена для збереження даних цього типу; діапазон допустимих значень, які можуть набувати змінна або константа цього типу; набір операцій, які можна виконувати над змінною або константою цього типу. Тип змінних завжди вказуються явно при їх описах, тип констант встановлюється компілятором автоматично за формою запису константи в програмі.
Типи даних С++ можна поділити на три групи: 1) скалярні, або прості – в довільний момент часу можуть мати лише одне значення; 2) агреговані, або складені – формуються за встановленими правилами з наборів скалярних типів; 3) тип «функція», що оголошує функції з заданим складом параметрів і встановленим типом значення, яке повертає функція. Арифметичні типи даних можна поділити ще на дві групи: 1) цілочислові, змінні цих типів можуть набувати тільки цілих значень; 2) дійсні – дозволяють зберігати і обробляти дійсні числа. Класифікація типів даних С++ показана на мал. 2.1.
Крім цього, типи даних можна поділити на базові і похідні. Базовими є типи int, char, float, double а також типи, утворені з них через застосування модифікаторів short, long, signed, unsigned. Особливим базовим типом є тип void – порожній або невизначений тип, який використовується, зокрема, в оголошеннях функції. Похідними вважають вказівникові типи, агреговані типи і функції. Всі вони формуються з використанням базових типів.
Мал. 2.1. Класифікація типів даних С++
Цілочислові типи
Основним типом даних, який використовується при роботі з цілими числами, є тип int (від англ. integer – ціле число). До типу int можна застосовувати модифікатори long (довге ціле), short (коротке ціле). Діапазони допустимих значень цілих типів даних компілятора Microsoft Visual Studio 2010 наведені в таблиці 2.1. Для інших компіляторів розмір в байтах та діапазон значень може відрізнятися.
Тип int ті його модифікації є знаковими типами – один біт (здебільшого найстаршій) двійкового коду числа займає знак. Прийнято, що знак плюс позначається нулем, знак мінус – одиницею. За замовчуванням змінні є знаковими (позначені необов’язковим модифікатором signed). Якщо певні дані набувають лише додатних значень, то можна вдвічі збільшити діапазон допустимих значень змінних оголосивши їх з модифікатором unsigned (беззнаковий). У беззнакових змінних біт знака розглядається як звичайний біт даних. Модифікатор unsigned можна використовувати разом з модифікаторами long і short.
Таблиця 2.1. Діапазони допустимих значень цілих типів
Тип |
Розмір в байтах |
Діапазон значень |
int |
4 |
-2 147 483 648 … 2 147 483 648 |
short int |
2 |
32 768 … 32 767 |
unsigned short int |
2 |
0 … 65 565 |
long int |
4 |
-2 147 483 648 … 2 147 483 648 |
unsigned long int |
4 |
0 … 4 294 967 295 |
long long int |
8 |
-263 … 263-1 |
unsigned long long int |
8 |
0 … 264-1 |
char |
1 |
-128 … 127 |
unsigned char |
1 |
0 … 255 |
Цілочислові константи можна записувати в трьох формах – десятковій, вісімковій, шістнадцітковій (див. розділ 1.6). Тип цілочислової константи встановлюється за її значенням і формою запису по таким правилам: 1) якщо значення константи потрапляє в діапазон значень типу int, то така константа отримує тип int; 2) інакше, якщо це беззнакова вісімкова чи шистнадцяткова константа, яка потрапляє в діапазон значень типу unsigned int, їй присвоюється тип unsigned int; 3) інакше, якщо значення константи потрапляє в діапазон значень типу long int, то ця константа отримує тип long int; 4) інакше, якщо константа беззнакова і потрапляє в діапазон значень типу unsigned long int, вона отримує цей тип; 5) інакше фіксується помилка.
Можна модифікувати тип константи. Для цього до числа долучають кінцеві символи u ( або U) та l (або L). Символ u/U вказує, що константі має бути присвоєний модифікатор unsigned, символ l/L розширює константу до розміру типу long int. Можна поєднувати обидва символи модифікації типу в довільному порядку. Наприклад, 0x1bd83ul – константа отримає тип unsigned long int.
Мова С++ відносить тип даних char (від англ. character – літера) до цілочислових типів. Через це тип даних char сумісний з усіма арифметичними типами.
До цілочислових констант належать також символьні константи. Символьна константа – це довільний, допустимий для встановленої на комп’ютері кодової таблиці графічний символ або ескейп-послідовність, записані в апострофах. Значенням символьної константи є числове значення коду символу. Саме код символу бере участь у всіх операціях, в які ступає символьна константа. Одну за значенням символьну константу можна записати декількома способами: ‘*’ – символьне зображення, ‘\052’ – вісімкова ескейп-послідовність, ‘\Х2А’ – шістнадцяткова ескейп-послідовність.
Логічний тип даних теж належить до цілих типів. Змінні цього типу можуть набувати два значення – true, false. В якості логічних змінних можна також використовувати змінні будь-якого цілочислового типу. При цьому нульове значення відповідає значенню false, будь-яке ненульове – значенню true.
В заголовному файлі limits записано набір макроконстант (іменованих констант), значення яких дорівнюють мінімальним і максимальним значенням, встановленим для цілих типів у даній системі програмування. Макроконстанти деяких граничних цілочислових значень наведені в таблиці 2.2.
Таблиця 2.2. Макроконстанти деяких граничних цілочислових значень
Ім’я макроконстанти |
Значення макроконстанти |
CHAR_MIN, CHAR_MAX |
Найменше і найбільше значення даних з типом char |
SCHAR_MIN, SCHAR_MAX |
Найменше і найбільше значення даних з типом signed char |
INT_MIN, INT_MAX |
Діапазон значень даних з типом int |
SHRT_MIN, SHRT_MAX |
Діапазон значень даних з типом short int |
LONG_MIN, LONG_MAX |
Діапазон значень даних з типом long int |
LLONG_MAX |
Діапазон значень даних з типом long long int |