Функції. Статичні змінні

Ми вже вивчили з вами глобальні та локальні змінні. Також, ми вже вивчили області видимості змінних.

Ми знаємо, що можна змінну створювати в якості аргументу функції або в середині функції. При цьому, зауважимо, що змінні, які створюються в середині функції будуть створюватися кожного разу при виклику даної функції і відповідно, будуть знищуватися при її завершенні. Це можна побачити в наступному коді:

        
            #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";
                }
            }
        
    

Важливо розуміти, що статична змінна створюється лише при першому виклику функції. І, при наступному виклику функції вона використовуватиме останнє значення, яке мала при попередньому виклику!