
- •12. Класи пам'яті даних 100
- •13. Робота з файлами 106
- •14. Посилання 111
- •Склад мови
- •Алфавіт мови
- •Лексеми
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Символьні рядки
- •Знаки операцій, роздільники, коментарі
- •Типи даних
- •Класифікація типів даних
- •Цілочислові типи
- •Дійсні типи
- •Оголошення змінних і констант
- •Переліки
- •Структура програми
- •Функція main
- •Область дії змінної
- •Введення і виведення даних
- •Функції стандартної математичної бібліотеки
- •Вирази і операції
- •Поняття виразу, операнда, операції
- •Порядок виконання операцій
- •Арифметичні операції
- •Порозрядні операції
- •Операції порівняння
- •Логічні операції
- •Операції присвоєння
- •Умовна операція
- •Операція визначення розміру sizeof
- •Узгодження типів у виразах
- •Умовні оператори
- •Оператори
- •Умовний оператор if
- •Оператор вибору switch
- •Оператори циклу
- •Цикл з параметром. Оператор for
- •Цикл з передумовою. Оператор while
- •Цикл з постумовою. Оператор do while
- •Оператори переходу
- •Використання псевдовипадкових чисел
- •Одновимірні масиви
- •Багатовимірні масиви
- •Символьні рядки
- •Вказівники
- •Оголошення вказівника, операції, пов’язані з вказівниками
- •Адресна арифметика
- •Void – вказівники, типізація вказівників
- •Звертання до елементів масивів через вказівники
- •Масиви символьних рядків і масиви вказівників
- •Динамічне виділення пам’яті
- •Структури і об’єднання
- •Оголошення і ініціалізація структур
- •Звертання до елементів структур
- •Перейменування типів
- •Об’єднання
- •Поля бітів
- •Директиви препроцесора
- •Призначення директив препроцесора
- •Директива включення #include
- •Директиви макропідстановок #define I #undef
- •Директиви умовної компіляції
- •Директиви #ifdef, #ifndef
- •Функції
- •Структура функції
- •Виклик функцій. Прототипи функцій
- •Взаємодія фактичних і формальних параметрів функцій
- •Inline – функції
- •Масиви і символьні рядки як параметри функцій
- •Використання кваліфікатора const в оголошеннях параметрів
- •Багатовимірні масиви як параметри функцій
- •Опрацювання структур у функціях
- •Вказівники на функції
- •Рекурсивні функції
- •Класи пам'яті даних
- •Клас пам'яті, час існування і видимість об’єкта
- •Область дії глобальних і локальних змінних
- •Специфікатори класів пам'яті
- •Специфікатори глобальних змінних
- •Багатофайлові програми
- •Робота з файлами
- •Звертання до файлів
- •Послідовний запис до файлу і послідовне читання з файлу
- •Файли з довільним доступом
- •Посилання
- •Призначення посилань
- •Передача аргументів функцій як посилань
Символьні рядки
Символьні рядки (рядкові константи) – це послідовність довільних символів кодової таблиці, охоплена лапками. Наприклад, “Hello, world”. Символьні рядки можуть містити ескейп – послідовності: “Hello, \”world\””.
В оперативній пам'яті всі символи рядка розташовані підряд. Кожен символ, включаючи ескейп – послідовності, займає один байт, в якому записується код символу. Особливість використання символьних рядків в мови програмування С++ полягає в тому, що компілятор автоматично долучає до них кінцевий нуль-символ \0, який використовується в процесі опрацювання рядків як ознака їх кінця.
Таким чином, два записи ‘А’ і “А” будуть різними не тільки синтаксично (по формі запису), а й семантично (за змістом). Перший запис позначає символьну константу, яка зберігається у пам'яті як ціле число, значення якого дорівнює коду літери А. Другий запис є символьним рядком, що складається з двох символів: літери А і нуль – символа.
Довжина символьного рядка не обмежується. У разі наявності в програмі довгих рядкових констант може виникнути потреба їх запису у декількох рядках програми. Використовують два способи поділу символьних рядків.
Перший полягає в тому, що в місці розриву рядка записують лівий слеш, за яким ставлять символ нового рядка (натискають клавішу Enter). Записані в наступному рядку символи вважають продовженням строкової константи. Недолік цього способу в тому, що в рядок результату потрапляють всі символи пробілу, записані перед символом слеша на початку нового рядка.
У другому способі перенесення строкових констант використовується така властивість компілятора: він об’єднує (конкатенує) у спільний рядок два записані підряд рядки, при цьому між ними може бути довільна символів – роздільників: пробілів, символів нового рядка, табуляції. Тому довгий рядок можна просто поділити на частини.
“Приклад довгого символьного рядка \ // Перший варіант
з перенесенням”
“Приклад довгого символьного рядка ” // Другий варіант
“з перенесенням”
Знаки операцій, роздільники, коментарі
Описані вище лексеми – ключові слова, ідентифікатори, константи – це так звані лексеми – слова. У програмі між двома лексемами – словами обов’язково має бути записаний знак операції або роздільник: знак пунктуації чи пробільній символ.
Знаки операцій можуть позначатись одним символом або дво- чи багатосимвольною комбінацією з символів другої групи алфавіту мови С++. Наприклад, односимвольні операції це +, *, -, /, &, =, багатосимвольні операції ++, --, >>.
До роздільників належать символи, які називають знаками пунктуації:
( ) [ ] { } , ; : = * #
Зокрема, фігурними дужками охоплюють тіло функції, знаком ; завершають усі описи та оператори, за допомогою знаку = ініціалізують змінні в оголошеннях. Один і той же символ може мати різне призначення залежно від контексту, в якому він використовується. Наприклад, знаком * позначають дві операції – арифметичне множення і звертання до даних за їх адресами, а також застосовують його як знак пунктуації для оголошення даних вказівникового типу. Фігурні дужки, крім охоплення тіла функції, використовуються для створення блоків операторів – всі оператори, які записані в дужках, компілятор буде розглядати як один оператор.
Роль роздільників лексем відіграють також символи, які називають пробільними – пробіл, символ горизонтальної і вертикальної табуляції, нового рядка, нової сторінки, переходу на початок рядка. Ці символи можна записувати в довільній кількості між будь-якими двома лексемами, самі лексеми розривати не можна. Компілятор розглядає послідовність довільних пробільних символів як один розділовий символ, що відокремлює лексеми.
У цьому призначенні роздільником є також коментар – текст, що роз’яснює роботу програми. Коментарі можна записувати в довільному місці програми між лексемами. Коментарі можуть займати декілька рядків – в цьому випадку коментар має починатися послідовністю символів /* і закінчуватися послідовністю символів */. Коментар можна також створювати за допомогою послідовності символів //. В цьому випадку коментарем є рядок символів після // і до символу переходу на наступний рядок, тобто до кінця рядка.