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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

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






Класс памяти определяет размещение объекта в памяти и продолжительность его существования





Явно задать класс памяти можно с помощью спецификаторов: auto, register, static, extern.

Ниже указаны спецификаторы класса памяти и соответствующее им место размещения объекта:

· auto -автоматически выделяемая, локальная оперативная память - сегмент стека (временная память). Спецификатор auto может быть задан только при определении переменной блока, например в теле функции. Локальная продолжительность существования. Этим объектам память выделяется при входе в блок и освобождается при выходе из него. Вне блока переменные класса auto не существуют.

· register -автоматически выделяемая по возможности регистровая память (регистры процессора). Спецификатор register аналогичен auto, но для размещения переменной используется не оперативная память, а регистры процессора. Если регистры заняты другими переменными, переменные класса register обрабатываются как объекты класса auto.

· static - статическая продолжительность существования, память выделяется в сегменте данных, объект существует до конца программы. Внутренний тип компоновки – объект будет существовать в пределах того файла с исходным текстом программы, где он определен. Этот класс памяти может быть приписан как переменным, так и функциям.

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

Класс памяти,и соответственноразмещение переменной (в стеке, в регистре, в динамически распределенной памяти, в сегменте данных) зависит как от синтаксиса определения, так и от размещения определения в программе.

Область действия (ОД) идентификатора (имени) - это часть программы, в которой можно обращаться к данному имени (сфера действия имени в программе).

Рассмотрим все случаи:

1) имя определено в блоке (локальные переменные): ОД - от точки определения до конца блока;

2) формальные параметры в определении функции (формальные параметры – это те же локальные переменные функции): ОД параметров– блок тела функции;

3) метки операторов: ОД меток– блок тела функции;

4) глобальные объекты: ОД глобальныхобъектов- вся программа от точки их определения или от точки их описания;

5) формальные параметры в прототипе функции: ОД параметров - прототип функции.

Область видимости (ОВ)

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

ОВ – это часть программы, в которой обращение к имени переменной позволяет обратиться к участку памяти, связанному с данной переменной.

ОВ может быть только меньшей или равной ОД. Следующая программа проиллюстрирует данную ситуацию [3]:

#include<iostream.h>

int k=0;

void main()

{int k=1;

{cout << k;

char k = 'A'; cout << k;

cout <<::k; cout << k;}

cout << k;}

Результат выполнения программы: 1A0A1

Объявлена глобальная переменная int k. Затем в главной функции определяется локальная переменная с тем же именем с именем и того же типа. Глобальная переменная становится "невидимой" в теле функции. Обращаться к "невидимой" внутри функции переменной можно используя операцию доступак внешнему объекту ::k.

В главной функции определен внутренний блок, в котором определена локальная переменная внутреннего блока с тем же именем char k. От точки определения символьной переменной до конца внутреннего блока локальная целочисленная переменная int k становится недоступной. После выхода из блока видимость (доступность) данной переменной восстанавливается.







Date: 2015-07-17; view: 493; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию