Про ініціалізацію мимоходом вже згадувалося багато разів, але зважди периферійно, як частина іншої теми. Цей розділ підводить підсумок декяких правил, після того як ми оговорили різноманітні типи зберігання. У випадку відсутності явної ініціалізації, зовнішні і статичні змінні буде гарантовано надано значення нуль. Автоматичні і регістрові змінні матимуть невизначене початкове значення (тобто непотріб).
Скалярні змінні можуть бути ініційованими під час їхнього визначення шляхом додачі до їхньої назви знака рівності і виразу:
int x = 1;
char squota = '/'';
long day = 1000L * 60L * 60L * 24L; /* мілісекунд у день */
Для зовнішніх і статичних змінних, ініціалізатор повинен бути сталим виразом; ініціалізація бідбувається один раз, концептуально до того як програма починає виконуватись. Для автоматичних і регістрових змінних, ініціалізатор не обов'язково повинен бути константою: це може бути будь-який вираз, включаючи попередьно-визначенні значення, навіть виклики функцій. Так, наприклад, ініціалізацію в програмі бінарного пошуку з Розділу 3.3 може бути написано як
int binsearch(int x, int v[], int n)
{
int low = 0;
int high = n - 1;
int mid;
...
}
замість
int low, high, mid;
low = 0;
high = n - 1;
Ефективно, ініціалізація автоматичних знінних, це просто скорочення для виразів присвоєння значення. Якій формі надавати перевагу, це значною мірою є питанням змаку. Ми загалом використовували явні присвоєння, оскільки ініціалізатори у оголошеннях важче побачити і знаходяться далі від місця використання.
Масив може бути ініційовано через додання до оголошення списку ініціалізаторів, включених у фігурні дужки і розділених комою. Як приклад — ініціалізація масиву days з кількістю днів кожного місяця:
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Коли розмір масиву не вказано, компілятор обчислить його, перелічивши ініціалізатори, 12 у цьому випадку.
Якщо надано менше ініціалізаторів, ніж вказаний розмір масиву, решті буде присвоєне значення нуль у випадку зовнішніх, статичних і автоматичних змінних. Помилка виникне у випадку зайвих ініціалізаторів. Не існує способу вказати повторні ініціалізатори, так само як елемент посередині масиву, без вказівки попередніх значень також.
Символьні масиви — це спеціальний випадок ініціалізаторів: можна використати ланцюжок замість нотації з фігурних дужок і ком:
char pattern[] = "ould";
що є скороченням для довшого, але рівнозначного
char pattern[] = { 'o', 'u', 'l', 'd', '\0' };
У обох випадках, масив складатиметься з п'яти елементів: чотири літери і кінцевий '\0'.