Локальные переменные
Локальные переменные — это переменные созданные в блоках. Областью видимости таких переменных является блоки ( и все их дочерние ), а также их область видимости не распространяется на другие блоки. Как ни как, но эти переменные созданы в отдельных блоках.
Из этого можно сделать вывод: у нас есть возможность создавать переменные с одинаковыми именами, но в разных блоках (или другими словами, чтобы их область видимости не совпадала друг с другом).
1 2 3 4 5 6 7 8 | int main() { for (int i = 0; i < 2; i++) { int b = i; // локальная переменная (она находится в блоке for) cout << b; } system("pause"); return 0; } |
В примере выше блоком где была создана локальная переменная b является цикл for (2 — 5). А вот если бы мы захотели вывести переменную b вне блока for, компилятор сообщил бы нам об ошибке, подробнее об этом говорится ниже.
Распространенной ошибкой среди начинающих программистов является использование локальных переменных в других блоках. Например ниже мы решили использовать переменную cost в функции summa, хотя мы ее создали в совершенно другой функции — main.
1 2 3 4 5 6 7 8 9 10 11 12 13 | int summa () { cout << cost; // ошибка } int main() { int cost = 10; // переменная созданная в блоке main summa(); system("pause"); return 0; } |
Нужно запомнить! Если вы создали локальную переменную, то вы должны понимать, что использование ее в других блоках будет невозможным.
Глобальная переменная уступает локальной
Если мы создадим глобальную переменную и с таким же именем локальную, то получится, что там где была создана локальная переменная будет использоваться именно локальная переменная, а не глобальная. Так как локальная переменная считается по приоритету выше глобальной. Давайте разберем, как это работает на примере ниже:
1 2 3 4 5 6 7 8 9 | string str = "You lucky!"; void message() { string str = "You very lucky man!"; cout << str; } void sait_message() { cout << str; } |
Мы создали глобальную переменную str со значением «You lucky!» и локальную переменную с таким же названием в функции message, но с другим значением — «You very lucky man!». Если мы вызовем функцию message, то результатом будет:
message.cpp
You very lucky man!
Process returned 0 (0x0) execution time : 0.010 s
Press any key to continue.
А вот, если мы вызовем функцию sait_message то результатом будет:
sait_message.cpp
You lucky!
Process returned 0 (0x0) execution time : 0.010 s
Press any key to continue.
Вот так глобальная переменная уступает локальной!
Мы советуем вам не создавать переменные с одинаковыми именами, поскольку в будущем вам будет тяжело разобраться в коде, если там будут присутствовать одинаковые переменные.