Статические переменные

Переменные, указанные в параметрах, а также переменные, объявленные внутри функции, являются локальными переменными. Эти переменные создаются при вызове функции, а после выхода из функции они удаляется. Таким образом, локальная переменная видна только внутри функции. Если внутри функции при объявлении локальной переменной не было присвоено начальное значение, то переменная будет содержать произвольное значение, так называемый «мусор». Если название локальной переменной совпадает с названием глобальной переменной, то все операции будут производиться с локальной переменной, а значение глобальной не изменится. Чтобы в этом случае обратиться к глобальной переменной, необходимо перед названием переменной указать оператор ::.

Пример сохранения промежуточного значения между вызовами функции в глобальной переменной приведен в листинге 12.20.

Листинг 12.20. Сохранение промежуточного значения в глобальной переменной

#include <iostream>

int x = 0;
void sum(int x);

int main() {
   sum(10);
   sum(20);
   std::cout << x << std::endl; // 30
   return 0;
}
void sum(int x) {
   ::x += x;
}

Статические переменные позволяют отказаться от использования глобальных переменных, для сохранения промежуточных значений между вызовами функции. Инициализация статической переменной производится только при первом вызове функции. Если при объявлении статической переменной не присвоено начальное значение, то переменная автоматически инициализируется нулевым значением. После завершения работы функции статическая переменная сохраняет свое значение, которое доступно при следующем вызове функции. При объявлении статической переменной перед типом данных указывается ключевое слово static. В качестве примера переделаем предыдущий пример и используем статическую переменную вместо глобальной (листинг 12.21).

Листинг 12.21. Использование статических переменных

#include <iostream>

int sum(int y);

int main() {
   std::cout << sum(10) << std::endl; // 10
   std::cout << sum(20) << std::endl; // 30
   std::cout << sum(55) << std::endl; // 85
   return 0;
}
int sum(int y) {
   static int x = 0; // Статическая переменная
   x += y;
   return x;
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов