Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Классы памяти и области видимости переменных
Классы памяти Класс памяти определяет «время жизни» объекта. Под объектом понимается идентификатор переменной, функция либо указатель функции. Кроме этого, класс памяти в совокупности с местоположением переменной в программе, определяет область видимости переменной. Различают два вида объектов: глобальные и локальные. Объекты с глобальным временем жизни существуют и имеют значение на протяжении всего времени исполнения программы. Все функции и их указатели – глобальные объекты. Локальные объекты «захватывают» новую область памяти всякий раз, когда управление передается блоку, в котором они описаны. Если переменная описана вне всяких блоков, то она считается глобальной. Это описание на так называемом внешнем уровне. Блок- это описание функции, составная команда, либо часть программы, заключенная в фигурные скобки { это блок } Блоки могут быть вложенными: { { это вложенный блок } } Переменные, описанные внутри некоторого блока, являются локальными. При каждом входе в блок им выделяется новая область памяти, а при выходе из блока память освобождается и значение переменной, следовательно, теряется. Локальные объекты видны с момента их описания до конца блока. Если при выходе из блока нужно сохранить значение переменной, то ее следует описать как статическую в данном блоке, например: { static int a; ... } Теперь при выходе из блока переменная а будет сохранять в памяти свое место и значение и будет «видна» только в этом блоке, а также в блоках вложенных в него. Глобальные объекты видны с момента их описания до конца файла всем функциям (блокам). Если имя локального объекта (переменной) совпадает с именем глобального объекта, то локальный объект маскирует глобальный в этом блоке. Область действия меток - функция, в которой метка используется. Пример 9.1: Область видимости переменных. #include < stdio. h> int k = 1; /* k = 1 */ void main(void) { printf(“k = %d \n”, k); // Результат: k = 1 { //1-й вложенный блок int k = 2, m = 5; printf(“ k = %d \t m = %d \n”, k, m); // Результат: k =2, m = 5 { //2-й вложенный блок int k=0; printf(“ k = %d \t m = %d \n”, k, m); // Результат: k=0, m=5 } printf(“ k = %d \n”, k); // Результат: k=2 } printf(“ k = %d \n”, k); // Результат: k=1 }
В приведенной программе четыре уровня видимости: 1) внешний уровень; 2) тело функции main(); 3) 1-й вложенный блок; 4) 2-й вложенный блок Внешний уровень – уровень файла. Объект внешнего уровня виден “всем в файле”. Время его жизни – глобальное. На локальном уровне внешний объект может быть переопределен.
|