Локальные и глобальные переменные. Область видимости.




c++, локальные и глобальные переменные, область видимости переменных, с++ для начинающихДля примерного понимания локализации переменных пожалуй начнем с аллегории. Что такое «Локальность»? Это ограниченность места дееспособности. Область видимости переменной — это тот участок кода (функция, цикл, пространство имени), в котором эта переменная объявлена (прописана). Вне этого участка — компилятор её не видит (она недоступна).

Так и получается — переменные описанные например внутри функций, не могут быть использованы за её пределами. В качестве примера можно рассмотреть такой код:

Давайте разберем пример поближе. Итак мы имеем переменную i, которая описана вне любых функций в программе. Ее область видимости и действия — вся программа без ограничения. А раз она «легитимна» во всей программе, во всех ее функциях и блоках операторов, заключенных в {}, то её называют Глобальной переменной.

Так же у нас в примере видна функция sum(), которая чего-то делает. В ней внутри описана вторая переменная — k. Она уже имеет конкретную «прописку» — функция. При этом данная переменная не может быть использована за пределами функции. Т.е. если в функции main() дописать еще и вывод этой k на экран, компилятор начнет «ругаться». Он ее просто напросто не видит вне функции sum(). Проверьте:

Переменная k называется локальной, и ее область видимости определена открывающей и закрывающей фигурными скобками функции sum(){…}. Дальше них ей хода нет, поэтому и использовать её нельзя вне этой функции. Компилируем:

c++, локальные и глобальные переменные, область видимости переменных, с++ для начинающих

Однако, нужно также учесть, что область видимости распространяется и на внутренние блоки. Для примера можно рассмотреть такой код:

Здесь проявлены следующие области видимости:

  • Глобальная — i = 2 принадлежит ей;
  • Локальная относительно функции — переменная k;
  • Локальная относительно цикла for() — вторая i.

Несмотря на то, что у for есть своя область видимости, сам for принадлежит функции sum(). А значит он, и все что в нем находится, подчиняется локальной области видимости этой функции. Т.е. все переменные, определенные в функции так же действительны и в теле for, что и позволяет работать оператору k += 1 (он же k = k+1 или k++).

Интереснее дело обстоит с переменной i, которая описана внутри for. Несмотря на имя, идентичное с глобальной переменной описанной выше, это уже другая переменная.

Как только цикл свое отработал, переменная i, описанная в нём, теряет свои полномочия, или иначе говоря — «освобождается» от обязанностей. Это не шутка — именно так и поступает менеджер памяти. Когда переменная описывается, менеджер резервирует под неё память, а когда её область видимости заканчивается — память эта освобождается. Менеджер памяти у себя помечает, что этот участок памяти более не принадлежит кому-либо, и его можно отдавать под запись других данных.

Для закрепления еще один легкий примерчик:

Здесь область видимости описана блоками операторов, ограничивающимися {}, Т.е. первый cout выведет 2, потому что определен блок операторов, в котором сработает это cout. И в этом же блоке определена локальная переменная с именем а, из нее он и возьмет значение прежде всего.

c++, локальные и глобальные переменные, область видимости переменных, с++ для начинающих

А уже за пределами {} оператор cout выведет 0, поскольку для него не существует той а, что равнялась 2. Его область видимости совпадает с другой а, которая равна 0, и определена выше вложенного блока.

Вообще запомните — в реальной жизни никогда не надо давать одинаковые имена переменным (за исключением тех, что классически используют для счетчиков циклов. Например i, j, k. Если у вас 10 циклов в коде и они не вложенные, то для каждого из них можно объявлять и определять счетчик с именем i. Это нормально). В других случаях, всегда давайте переменным уникальные имена, если не хотите, чтобы вас потом «вспоминали» программисты, которые будут разбираться в вашем коде.

Предлагаем также просмотреть видеоурок по теме область видимости. Автор видеоурока: Марков Денис

Рассылка новых уроков по программированию:


Согласен получать уведомления от purecodecpp.com на мой e-mail

Дата
Страница
Локальные и глобальные переменные.Область видимости С++
Рейтинг
5

Добавить комментарий

Код размещайте в тегах: <pre class="lang:c++ decode:true ">YOUR CODE</pre>