|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Область видимости. Локальные переменные. Глобальные переменные. Статические локальные переменныеРассмотрим два аспекта, касающихся взаимодействия переменных и функций: область видимости и класс памяти. Область видимости определяет, из каких частей программы возможен доступ к переменной, а класс памяти — время, в течение которого переменная существует в памяти компьютера. Рассмотрим два типа области видимости: локальная область видимости и область видимости файла. Переменные, имеющие локальную область видимости, доступны внутри того блока, в котором они определены. Блоком обычно считается код, заключенный в фигурные скобки. Например, тело функции представляет собой блок. Переменные, имеющие область видимости файла, доступны из любого места файла, в котором они определены. Существует два класса памяти: automatic (автоматический) и static (статический). У переменных, имеющих класс памяти automatic, время жизни равно времени жизни функции, внутри которой они определены. У переменных, имеющих класс памяти static, время жизни равно времени жизни всей программы.
Переменные, определяемые внутри функции main(), ничем не отличаются от переменных, определяемых внутри других функций. Переменные, определяемые внутри функции, называют локальными, поскольку их область видимости ограничивается этой функцией. Иногда такие переменные называют автоматическими, поскольку они имеют класс памяти automatic. Локальная переменная не существует в памяти до тех пор, пока не будет вызвана функция, в которой она определена (в более общем виде это утверждение звучит так: переменная, определенная внутри любого блока операторов, не существует в памяти до тех пор, пока этот блок не выполнен; переменные, определенные в теле цикла, существуют только во время исполнения цикла). Название автоматического класса памяти как раз указывает на то, что переменные автоматически создаются при входе в функцию и автоматически уничтожаются при выходе из нее. Период времени между созданием переменной и ее уничтожением называется временем жизни переменной. Время жизни локальной переменной равно времени, проходящему с момента объявления переменной в теле функции до завершения исполнения функции. Ограниченное время жизни переменной позволяет экономить память во время выполнения программы. В случае, если функция не вызывается, нет необходимости резервировать память под ее локальные переменные. Удаление локальных переменных из памяти при завершении функции позволяет распределить освободившуюся память между локальными переменными других функций.
Следующим видом переменных, который мы рассмотрим, будут глобальные переменные. В отличие от локальных переменных, определяемых внутри функций, глобальные переменные определяются вне каких-либо функций (как мы позже увидим, они также определяются вне любого из классов). Глобальная переменная видима из всех функций данного файла и, потенциально, из других файлов. Говоря более точно, глобальная переменная видна из всех функций файла, которые определены позже, чем сама глобальная переменная. Как правило, необходимо, чтобы глобальные переменные были видимы из всех функций, поэтому их определения располагают в начале листинга. Иногда глобальные переменные называют внешними, поскольку они являются внешними по отношению к любой из функций программы. Глобальные переменные используются в тех случаях, когда их значения должны быть доступны одновременно нескольким функциям. В процедурно-ориентированных программах глобальные переменные содержат наиболее важную информацию, используемую программой. Тем не менее, всеобщая доступность глобальных переменных имеет и негативную Глобальные переменные имеют статический класс памяти, что означает их существование в течение всего времени выполнения программы. Память под эти переменные выделяется в начале выполнения программы и закрепляется за ними вплоть до завершения программы. Для того чтобы глобальные переменные были статическими, не обязательно указывать в их определении ключевое слово static: статический класс памяти определен для этих переменных по умолчанию.
Статическая локальная переменная имеет такую же область видимости, как и автоматическая: функцию, к которой принадлежит данная переменная. Однако время жизни у статической локальной переменной иное: оно совпадает со временем жизни глобальной переменной, правда, с той разницей, что существование статической локальной переменной начинается при первом вызове функции, к которой она принадлежит. Далее переменная существует на всем протяжении выполнения программы. Статические локальные переменные используются в тех случаях, когда необходимо сохранить значение переменной в памяти после того, как выполнение функции будет завершено, или, другими словами, между вызовами функций.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.002 сек.) |