статичний тип даних ім'я змінної
Статичні локальні змінні
Коли змінна у функції є статичною, змінна зберігає своє значення між викликами функції.
// Приклад1.c#включати
int fun1 ()
int count = 0;
рахувати ++;
кількість повернень;
int fun2 ()
статичний розрахунок int = 0;
рахувати ++;
кількість повернень;
int main ()
printf ("fun1 1-й виклик повертає:% d \ n", fun1 ());
printf ("fun1 2-й виклик повертає:% d \ n \ n", fun1 ());
printf ("fun2 1-й виклик повертає:% d \ n", fun2 ());
printf ("fun2 2-й виклик повертає:% d \ n", fun2 ());
повернути 0;
У прикладі 1.c, ми маємо дві функції: fun1 () і fun2 (). В fun1 (), ми оголошуємо одну змінну (count) та ініціалізуємо її до 0. Потім ми збільшуємо змінну count і повертаємо отримане значення. Використовуючи основний (), ми називаємо fun1 () двічі, і кожного разу повертається значення 1, оскільки змінна count очищається під час виклику fun1 () завершено. В fun2 () ми оголосили змінну count як статичну змінну. Тому його цінність зберігається. Використовуючи основний (), ми називаємо fun2 () двічі: перший раз повертається значення 1, а вдруге - значення 2.
Статичні глобальні змінні
Статична глобальна змінна поводиться так само, як і інші глобальні змінні, але до неї неможливо отримати доступ з іншої програми C.
Статичні функції
У C функції за замовчуванням є глобальними. Однак, якщо ми оголошуємо статичну функцію, тоді функція є локальною і не може бути доступна з іншої програми C.
Ініціалізація статичних змінних
Якщо статична змінна явно не ініціалізована, вона ініціалізується як 0.
// Приклад2.c#включати
int main ()
статичний int i;
printf ("Значення i:% d \ n", i);
повернути 0;
У прикладі2.c, ми оголосили статичну змінну i, яка не ініціалізується. Однак, оскільки змінна є статичною, вона автоматично ініціалізується до 0.
Важливо зазначити, що статична змінна повинна бути ініціалізована постійним літералом; ми не можемо використовувати функцію, що повертається, для ініціалізації статичної змінної.
// Приклад3.c#включати
int fun1 ()
повернення 5;
int main ()
статичний int i = fun1 ();
printf ("Значення i:% d \ n", i);
повернути 0;
У прикладі 3.c, ми намагаємося ініціалізувати статичну змінну, використовуючи повернене значення fun1 (). Однак, як бачите, при компіляції коду повертається помилка.
Резюме
Час роботи статичної змінної та час роботи програми рівні.
Якщо статична змінна не ініціалізована, тоді вона прийме значення за замовчуванням 0.
Ні глобальна статична змінна, ні статична функція не доступні з іншої програми, крім тієї, в якій вона була визначена.