Функції. Статичні змінні
Ми вже вивчили з вами глобальні та локальні змінні. Також, ми вже вивчили області видимості змінних.
Ми знаємо, що можна змінну створювати в якості аргументу функції або в середині функції. При цьому, зауважимо, що змінні, які створюються в середині функції будуть створюватися кожного разу при виклику даної функції і відповідно, будуть знищуватися при її завершенні. Це можна побачити в наступному коді:
#include <iostream>
void fun()
{
int a = 5;
for (int i = 0; i < 3; i++)
{
std::cout << a++ << " ";
}
}
int main()
{
for (int i = 0; i < 3; i++)
{
fun();
std::cout << "\n\n";
}
}
Як бачите, програма буде виводити одні й ті ж самі значення.
А, уявіть, що ви створюєте калькулятор і вам потрібно використовувати результат знову і знову. Що ж тоді робити?
Можна його повертати, а потім знову передавати назад у функцію. Це цілком робоче та мудре рішення. Але, в цьому випадку програма буде витрачати час на копіювання значень. Сучасні комп’ютери цього не відчують, тому й проблем це викликати не повинно.
Можна створити глобальну змінну, яка буде зберігати в собі даний результат. Далеко не найкраще рішення, адже можна випадково цей результат змінити. Та і як жартують досвідченні програмісти «найкращий префікс глобальної змінної це
Є ще один варіант. Це використання статичної змінної.
Статична змінна
Статична змінна це змінна, яка створюється в середині функції, але при цьому, вона завершує своє існування лише в кінці програми. Цей тип змінної є чимось середнім між локальною та глобальною змінною. Вона не доступна за межами функції як і локальна змінна, але при цьому зберігає своє значення до кінця програми як глобальна змінна.
Для того, щоб створити статичну змінну потрібно вказати ключове слово а далі тип та
static тип_змінної ім’я_змінної;
Давайте використаємо код з початку уроку але при цьому створимо не локальну, а статичну змінну та поглянемо на результат.
#include <iostream>
void fun()
{
static int a = 5;
for (int i = 0; i < 3; i++)
{
std::cout << a++ << " ";
}
}
int main()
{
for (int i = 0; i < 3; i++)
{
fun();
std::cout << "\n\n";
}
}
Важливо розуміти, що статична змінна створюється лише при першому виклику функції. І, при наступному виклику функції вона використовуватиме останнє значення, яке мала при попередньому виклику!