Деякі змінні можуть мати початкове значення, тобто значення, яке змінна приймає при запуску програми, але яке, на відміну від значення константи, буде змінюватися в процесі виконання. Початкове значення може бути присвоєно або при визначенні змінної, або оформлено у вигляді окремої інструкції.
Числовим або символьним змінним (визначення рядків ми обговоримо пізніше) значення може присвоюватися при їх визначенні:
char initial = 'A';
float rate = 0.55;
У цих інструкціях ми визначили целочисленную змінну count та привласнили їй початкове значення 5. Далі ми визначили символьну змінну initial, присвоївши їй букву "А" в якості початкового значення, і змінну типу float з ім'ям rate і початковим значенням 0.55. Значення символьної змінної має бути укладена в одинарні лапки, а число з плаваючою точкою має мати хоча б по одному знаку зліва і праворуч від точки.
Якщо змінна визначена, можна привласнювати їй значення в окремій інструкції, використовуючи оператор присвоювання (=):
Присвоєне значення є початковим і може змінюватися в процесі виконання програми, інакше змінна не була б змінної.
Якщо початкове значення змінної не відомо заздалегідь, то після початку виконання програми воно може бути введено з клавіатури, з дискового файлу або отримано в результаті певних обчислень. З усіма цими способами ви познайомитеся трохи пізніше.
Визначення строкової змінної
Мал. 3.10. Дані строкового типу в пам'яті
Послідовність \ 0 називається нульовим символом і розглядається як один символ.
Як ви пам'ятаєте, мова Сі не містить строкового типу даних і не має ніяких засобів для роботи з рядками. На щастя, Сі дозволяє працювати з даними строкового типу, використовуючи масиви. Раніше ми вже визначали рядок як ряд послідовних символів. Саме цим вона і є-поруч символьних змінних, об'єднаних в щось, зване масивом. Елементи рядка зберігаються разом в послідовних елементах пам'яті. Як приклад на рис.3.10 показано, як виглядає змінна, має значення "Привіт". Кожна буква зберігається в окремому елементі пам'яті так само, як одиночна символьна змінна, але вся рядок може бути виведена на екран монітора як єдине ціле за допомогою однієї функції puts (). Послідовність \ 0 є спеціальним символом, який Сі вставляє після кожного рядка. Він зазначає кінець рядка, вказуючи функції типу puts (), де слід припинити виведення символів на екран.
Ви вже знаєте як визначити строкову константу- за допомогою директиви #define, уклавши символи рядка в лапки:
#define CLIENT "Кейт Тіммонс"
Щоб визначити строкову змінну, необхідно використовувати тип char і вказати максимальне число символів, яке може містити рядок. Наприклад, так:
де var_name означає ім'я змінної, а N- максимальну кількість символів, яке завжди полягає в квадратні дужки: пряму [і зворотний].
Число, вказане в дужках, має бути на одиницю більше максимальної кількості символів, яке ви збираєтеся використовувати, так як Сі потребує додаткового просторі, щоб поставити нульовий символ. Наприклад, змінна, що містить абревіатури назв штатів, може бути визначена наступним чином:
Мал. 3.11.Определеніе строкової змінної Мал. 3.12. Не можна привласнити строкової змінної значення, що має більшу кількість символів, ніж було для неї зарезервованопри цьому, як показано на рис.3.11, створюється строкова змінна, яка називається state і містить два символи, плюс нульовий символ, що означає кінець рядка (\ 0).
Чому це так важливо, можна пояснити на наступному життєвому прикладі. Припустимо, ви вводите змінну, що містить імена клієнтів. Ви визначили її наступним чином:
Програма працює бездоганно до тих пір, поки ви не отримуєте замовлення від пана Флаглехоффена. Коли ви спробуєте ввести його ім'я в список, ваша програма зупиниться через помилки виконання, що ілюструє рис.3.12.
Для того щоб уникнути подібної неприємності, ви могли б у визначенні змінної дещо збільшити допустиму кількість символів:
але якщо в програмі буде кілька таких змінних, ви даремно витратите чимало пам'яті комп'ютера.
де використовується над дозволена інструкція
Якщо ви хочете привласнити початкове значення строкової змінної, це можна зробити, визначивши використовувану змінну одним з двох допустимих
Мал. 3.13. ініціалізація рядкиспособів. Ви можете привласнити значення визначенням змінної перед функцією main ():
char client [] = "Флаглехоффен";
Зауважте, що в цьому випадку значення максимального числа символів строкової змінної в квадратних дужках НЕ проставлено. Максимальне число символів строкової змінної при такому способі визначення залежить від використовуваного компілятора, але практично визначається кількістю символів в початковому значенні плюс один (рис.3.13). Зауважимо, що в якості параметра функції puts () використовується тільки ім'я змінної без будь-яких квадратних дужок.
Інший спосіб привласнення початкового значення всередині функції main () кілька складніший:
static char greet [] = "Привіт";
Визначення виконується всередині функції main (), але починається зі слова static, а змінна називається статичною. Обумовлена таким чином змінна може бути використана тільки всередині функції, в тілі якої вона була визначена. Якщо ви бажаєте присвоїти початкове значення строкової змінної, яка визначається всередині функції, то її слід визначити як статичну змінну (докладніше дивись в розділі 7).