Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Классы памяти и области видимости переменных






 

Классы памяти

Класс памяти определяет «время жизни» объекта. Под объектом понимается идентификатор переменной, функция либо указатель функции. Кроме этого, класс памяти в совокупности с местоположением переменной в программе, определяет область видимости переменной.

Различают два вида объектов: глобальные и локальные.

Объекты с глобальным временем жизни существуют и имеют значение на протяжении всего времени исполнения программы.

Все функции и их указатели – глобальные объекты. Локальные объекты «захватывают» новую область памяти всякий раз, когда управление передается блоку, в котором они описаны.

Если переменная описана вне всяких блоков, то она считается глобальной. Это описание на так называемом внешнем уровне.

Блок- это описание функции, составная команда, либо часть программы, заключенная в фигурные скобки

{

это блок

}

Блоки могут быть вложенными:

{

{

это вложенный блок

}

}

Переменные, описанные внутри некоторого блока, являются локальными. При каждом входе в блок им выделяется новая область памяти, а при выходе из блока память освобождается и значение переменной, следовательно, теряется. Локальные объекты видны с момента их описания до конца блока.

Если при выходе из блока нужно сохранить значение переменной, то ее следует описать как статическую в данном блоке, например:

{

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-й вложенный блок

Внешний уровень – уровень файла. Объект внешнего уровня виден “всем в файле”. Время его жизни – глобальное. На локальном уровне внешний объект может быть переопределен.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.