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

 

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

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

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

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

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

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

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

{

это блок

}

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

{

{

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

}

}

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

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

{

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

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

 








Дата добавления: 2017-06-02; просмотров: 287;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.