3.8.1. Тип char
Змінна типу char може зберігати тільки один символ (точніше, вона зберігає в собі код символа за таблицею Unicode). Оголошується така змінна за загальними правилами:
тип ім’я_змінної
Наприклад, char c;. Щоб такій змінній присвоїти значення (т. т. тільки один символ і не більше), потрібно після знаку присвоєння вказати потрібний символ, поміщений в апострофи (одинарні лапки):
char c='a';
Як відзначалося раніше, ви можете присвоювати будь-який символ із будь-якої мови. Хоч китайський ієрогліф. Але потрібно пам'ятати, що тип не містить у собі опис шрифту (для цього існують інші засоби). Тому, якщо ви спробуєте вивести на екран ієрогліф, отримаєте щось інше.
Літералами прийнято називати текстові константи. У цьому сенсі запис char c='a'; задає символьну константу (літерал) с.
Деякі символи з таблиці кодування не мають відображення на екрані (чи на папері), тому що спеціально визначені як управляючі. Тобто вони управляють вводом-виводом тексту або служать для розшифровування значень інших символів (наприклад, до якої мови відноситься символ). Фрагменти таблиці Unicode показані на рис. 3.4.
Рис. 3.4. Фрагмент таблиці Unicode
Таблицю легко знайти в Інтернеті.
Коди перших 32-х символів таблиці - коди управляючих символів. Далі йдуть підтаблиці в розрізі мов: латиниця, грецький і т. д.
Змінній типу char можна присвоювати, разом з символами, як показано вище, і їх коди безпосередньо. Тільки ці коди повинні мати форму так званих esc-послідовностей (або управляючих послідовностей). Усі принтери, наприклад, використовують такі послідовності, отримуючи їх від комп'ютера для управління друком.
Запис char MyChar = '\x0058'; означає, що змінній MyChar буде присвоєний шістнадцятко вий (символ х вказує на це) код 0058 (символ X, як показано на рис. 3.5).
Рис. 3.5. Символ згідно таблиці Unicode
Цей факт легко перевірити, якщо наведене оголошення символа вставити в текст додатка, нижче вставленого рядка встановити точку зупину програми і запустити програму в режимі відлагодження. Коли програма зупиниться на точці зупину, перевірте вміст оголошеного символа, навівши на нього курсор миші (рис. 3.6).
Змінній char можна присвоювати і цілі числа, поставивши примусове перетворення їх в тип char:
char MyChar = (char) 88;
Тут десяткове число 88 (зрозуміло, що воно грає роль коду 88) примусово перетвориться в тип char згідно вказаного формату: (char). Можете перевірити за програмою, вставивши в неї вказаний рядок, як це зроблено раніше за допомогою відлагоджувача і наведення курсора миші на змінну. Результат буде тим же - Х. Чому? Тому що таблиця Unicode - таблиця шістнадцяткових кодів. А у нас число 88 - десяткове. Отже, середовище програмування переведе це число у шістнадцятковий формат, щоб скористатися таблицею Unicode. А 88 в шістнадцятковому форматі дорівнює 58. А це, як ми бачили раніше - код символа Х.
Раніше ми присвоїли змінній типу char безпосередньо значення шістнадцяткового коду у вигляді: char MyChar = '\x0058';. Але такий код можна присвоїти і в іншому вигляді:
char MyChar = '\u0058';
Тут символ u після зворотного слеша (\) вказує на Unicode. Тип char можна явно перетворювати в типи ushort, int, uint, long, ulong, float, double, decimal. Приклад показаний на рис. 3.7. Тобто таким способом ми можемо отримати код символа в десятковій системі числення.
Проте зворотне перетворення не можливе.
Рис. 3.6. Перевірка з допомогою програми факту присвоєння символу деякого коду
замість літерала
Управляючі символи таблиці Unicode, можуть записуватися не лише у формі чотирирозрядного шістнадцяткового числа із зворотним слешем на початку, але і символьному вигляді, для полегшення користування ними. Перелік деяких таких символів приведений в таблиці 3.2.
Таблиця 3.2. Управляючі символи Unicode
Вигляд | Пояснення |
'\\' | Зворотний слеш |
'\0' | Завершальний нуль-символ рядка |
'\a' | Алерт (попередження) |
'\b' | Бекспейс (повернення назад на одну позицію) |
'\f' | form feed (протягування сторінки) |
'\n' | Перехід на новий рядок |
'\r' | Повернення каретки |
'\t' | Горизонтальна табуляція |
'\v' | Вертикальна лапка |
'\u' | Unicode- послідовність |
'\' ' | Одинарна лапка(апостроф після слеша), потрібна для символьних літералів |
'\" ' | Подвійна лапка(після слеша), потрібна в рядкових літералах |
Рис. 3.7. Перетворення типу char в числові дані