Уявіть собі завдання по написанню функції month_name(n), яка би повертала покажчик на символьний ланцюжок, який містить назву n-нного місяця. Це являє собою ідеальне примінення внутрішнього статичного масиву. month_name включатиме приватний масив символьних ланцюжків, і повертатиме покажчик на відповідний, коли викликати її. Цей розділ демонструє, як ініціалізувати такий масив назв.
Синтаксис є подібним до попередніх ініціалізацій:
/* month_name: повертає назву n-нного місяця */
char *month_name(int n)
{
static char *name[] = {
"Illegal month",
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
};
return (n < 1 || n > 12) ? name[0] : name[n];
}
Оголошення name являється масивом символьних покажчиків, таким самим як lineptr у прикладі з сортуванням. Ініціалізатором служить список символьних ланцюжків; кожному з них призначено відповідне положення в масиві. Символи i-ного ланцюжка розміщено в певному місці і покажчик на них збережено в name[i]. Оскільки розмір масиву name не вказано, компілятор сам порахує ініціалізатори і заповнить розмір правильним числом.