Локальные переменные
Если внутри блока объявлена переменная, она называется локальной. Вне функции нельзя получить доступ к этой переменной. Она создается и инициализируется при ее определении, и удаляется, когда программа покидает блок, в котором переменная была объявлена.
Везде, где это возможно, следует использовать локальные переменные. Память станет оптимально использоваться, поскольку она задействована только во время выполнения функции. Функции, которые используют глобальные или статические переменные, с большой вероятностью не могут работать параллельно.
Переменные параметров также являются локальными. Они помещаются в стек и удаляются из него при завершении функции, а инициализируются с параметрами вызова функции. Только ссылочные переменные не могут быть локальными, поскольку они являются ссылкой на переменную программы, вызывающей функцию.
Статические переменные
Локальные переменные могут быть объявлены в качестве статических. Такие переменные создаются и инициализируются, когда их определение встречается в программе первый раз. Переменная и ее содержимое при этом сохраняется до конца выполнения программы. Для определения переменной в качестве статической используется ключевое слово static.
Такие переменные видимы только в блоке, в котором они определены. В отличие от глобальных переменных к ним нельзя получить доступ извне. Статическая переменная — средство выбора, если функция требует некоторого подобия памяти для хранения информации о ее предыдущем вызове.
#include <iostream>
using namespace std;
int globvar = 1;
void func(){
static int statvar = 1;
int locvar = 1;
cout << "статическая:" << statvar << " ";
cout << "глобальная:" << globvar << " ";
cout << "локальная:" << locvar << endl;
statvar++;
globvar++;
locvar++;
}
int main(){
func();
func();
func();
globvar = 8;
func();
func();
}
Локальная переменная locvar создается по-новому при каждом вызове функции и удаляется, когда программа покидает функцию. Каждый раз переменная инициализируется заново и принимает значение 1. После инкрементирования внутри функции переменная имеет значение 2. Но при завершении функции, данная переменная удаляется, а при вызове функции создается и инициализируется заново. Если мы попытаемся изменить ее значения за пределами блока, в котором она объявлена, компилятор выдаст ошибку, что такая переменная не была объявлена.
Глобальная переменная globvar создается и инициализируется при старте программы. Внутри функции она инкрементируется и выводится. Поскольку эта переменная является глобальной, она доступна во всех функциях и в главной функции.
Статическая переменная statvar ведет себя частично как локальная, частично как глобальная переменная. Как локальная переменная она защищена от неконтролируемого доступа извне. С другой стороны, она не теряет своего значения после завершения работы функции. Если мы попытаемся изменить ее значение за пределами блока, в котором она объявлена – компилятор выдаст нам ошибку, но, в отличие от локальной переменной, при выходе из функции статическая переменная не удаляется, и при следующем вызове функции, мы сможем продолжить работу с переменной.
