Область видимости переменных в C++ для начинающих

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.
    Областью видимости переменных называется часть программы, в которой переменную можно использовать. Области видимости равносильно определение область действия

В качестве обучающего примера попробую описать область видимости переменных с помощью функций.

Первый вариант — глобальная переменная. Глобальная переменная объявляется один раз и действует по всей программе

Код C++ Глобальная переменная

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

Если я плохо объяснил, что обозначает глобальная переменная, то я неудачник. Если хорошо, то имеет смысл читать дальнейшее описание. Помимо понятия Глобальная переменная — существует Локальная переменная. Локальная переменная определяется внутри функции и доступна она только для функции, внутри которой была объявлена.
Код C++ Локальная переменная

Ошибка в указанном месте возникает из-за того, что для функции sum не действует никакая переменная, объявленная внутри любой другой функции. Если программист объявляет переменную внутри некоторой одной функции, значит он предполагает, что с этой переменной будет работать только и только та функция, в которой переменная была объявлена. Такие переменные живут только внутри своих функций и не доступны для других участков кода. Это и есть локальная переменная. В отличии от первого приведенного примера, в этом примере глобальных переменных объявлено не было. Значит по факту для sum переменной a не существует в природе.

Существует ситуация, когда программист объявляет глобальную и локальную переменные с одинаковыми именами. В этом случае во время работы функции с локальной переменной локальная переменная закрывает глобальную и говорит: «Я тут главная». Непосредственная работа выполняется с локальной переменной, при этом значение глобальной переменной остается в памяти
Код C++ Локальная переменная затеняет глобальную

В случае когда программист объявляет глобальную переменную и одноименную с ней локальную, локальная затеняет глобальную. При вызове функции с локальными переменными, локальные переменные по приоритету выше глобальных. Так как локальные переменные по приоритету выше, значит значения для вычислений берутся из них. По завершении функции глобальная переменная вновь приобретает силу. Это можно понять по приведенному примеру. Вне функций была объявлена некоторая переменная i (вне = глобальная), вместе с ней внутри функции sum была объявлена еще одна переменная i (внутри = локальная).

В последнем примере было описано, что обозначает выражение «локальная переменная затеняет глобальную». Так как глобальная переменная не теряет своего значения, то программист может обратиться непосредственно к ней внутри функции с одноименной локальной переменной . Для такого обращения используется глобальный оператор разрешения
Код C++ Глобальный оператор разрешения

Такое описание было написано для тех начинающих, которым надо всё поподробнее растолковать. Самое главное запомнить понятие локальной и глобальной переменных

  • Локальная переменная — такая переменная, которая объявляется внутри функции и действует она только внутри своей функции (видима только своей функции)
  • Глобальная переменная — такая переменная, которая объявлена вне функции и доступна она для окончания работы программы (видима всей программе)

Несмотря на описанные возможности не рекомендуется применять переменные с одинаковыми именами. Во избежание путаницы следует избегать глобальных переменных везде где возможно. Это важно помнить.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Один комментарий: Область видимости переменных в C++ для начинающих

  • Sergio говорит:

    Добрый день! Возможно ли передать из одной функции локальную переменную (да и локальный массив) в другую функцию? Понятно, что проще объявить глобальную переменную, но всё же интересно… 🙄

    Автор сайта отвечает:
    Глобальных переменных нужно избегать.
    или я не понял вопроса или вы не так его задали.
    передать с помощью параметров. Без указания параметров передать нельзя, указать в параметрах можно.

    А как поступить в данном случае?

    Правильно ли я всё делаю?

    Автор сайта отвечает:
    Прототипы неправильно.
    myfunc2(); должно быть myfunc2(int);
    myfunc2(); должно быть myfunc2(int, char[]); //вроде так

    Вы правильно поняли вопрос, спасибо.
    Массив, как понимаю, передаётся таким же образом?

    Автор сайта отвечает:
    Смотря какой массив, они разными бывают.
    Мне кажется, что основные ответы на подобные вопросы можно найти если на странице содержания тем
    (http://ci-plus-plus-snachala.ru) нажать ctrl+F и ввести Перед подсветятся разные темы по работе с параметрами у функций
    Все -таки это отдельные темы и описывались они отдельно.

    Спасибо. Я почему-то до этого момента был уверен, что на странице содержания темы выстроены по порядку изучения С++, а не просто сгруппированы по разделам…

    Автор сайта отвечает:
    Я могу быть неправ, но не забегая вперед будет очень трудно изучить какой бы то ни было язык программирования.
    Язык С++ изучается как по спирали и изучив что-то новое часто приходится возвращаться к тому что уже однажды вроде бы было изучено и постоянно получается узнавать что-то новое.
    Многие авторитетные авторы используют забегание наперед, чтобы лучше объяснять своим читателям то что они хотят объяснить.
    Я не авторитетный автор и авторитетным стать не смогу. К сожалению, у меня очень много ошибок и я плохо разбираюсь в матчасти. Лучше чем многие создатели похожих сайтов, но недостаточно, чтобы считать себя хорошим учителем.

    На странице содержания темы и выстроены близко к порядку изучения, но содержание с постоянным возвратом набило бы эту страницу одними и теми же темами и ключевых тем было бы просто не видно.

    Автор сайта отвечает:
    И еще такой момент есть.
    На каждой странице с описанием темы вверху всегда расположены 2 ссылки.
    http://ci-plus-plus-snachala.ru/?p=121 ===> С++ первая программа Очистка экрана clrscr(); (хорошо видно, тут одна)
     
    Если жать на эти ссылки, то порядок будет больше напоминать книгу чем смотреть порядок в содержании. И немного удобнее, не нужно каждый раз возвращаться к содержанию, чтобы перейти к следующей теме.

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

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Девушка-программист едет в трамвае, читает книгу. Старушка смотрит на девушку, смотрит на книгу, крестится и в ужасе выбегает на следующей остановке. Девушка читала книгу "Язык Ада"

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок