Читайте также:
|
|
Каждая переменная и функция в программе на языке Си принадлежит к какому-либо классу памяти. Класс памяти переменной определяет время ее существования (время жизни) и область видимости (область определения), связанные с понятием блока программы (сколько времени и где существует).
Различают четыре класса памяти:
auto, register, extern, static.
Большинство переменных в программе на языке Си имеют класс памяти auto – по умолчанию принято, что для любой переменной, объявленной внутри функции (локальная переменная) или блока, для которой класс явно не указан, подразумевается как класс auto.
Автоматическая переменная (auto) – это всегда локальная переменная, но не наоборот, т.е. видима (существует) от точки ее объявления и до конца блока, в котором она объявлена, кроме вложенных блоков, в которых эта переменная определяется повторно. Память для нее выделяется при входе в блок (автоматически) и освобождается (автоматически) при выходе из блока.
Доступ к такой переменной возможен только в том блоке, где она определена. Доступ из внешнего блока невозможен, т.к. до момента входа в блок переменная вообще не существует (т.е. под нее не отведена память). Это связано с тем, что автоматические переменные образуются и исчезают одновременно с входом в функцию и выходом из нее, они не сохраняют своих значений от вызова к вызову и должны устанавливаться заново.
Регистровая переменная (register) – это автоматическая переменная. Ключевое слово register – лишь указывает компилятору. Что такую переменную рекомендуется разместить не в оперативной памяти, а одном из регистров, если это возможно, что приводит к уменьшению времени выполнения программы. Так могут объявляться отдельные переменные целых типов и указатели типа near. Но это неприменимо для массивов, структур, объединений и переменных с плавающей точкой.
Внешняя переменная (extern) имеет область существования от точки ее объявления и до конца файла, где она объявлена. Если внутри блока определена автоматическая переменная с таким же именем (т.е. локальная переменная), то внешняя переменная здесь недоступна. Предполагается, что память под переменную, объявленную с классом extern, выделяется в другом модуле в месте ее определения, а в данном модуле только используется ее значение. По умолчанию функция имеет класс extern.
Статическая переменная (static) в противоположность автоматической существует все время, пока выполняется программа, и обеспечивает возможность сохранить значение локальной переменной при выходе из функции и использовать его при последующем входе в блок. Ее область существования (видимости) – от точки определения и до конца блока, если внутри блока она не определена заново. По умолчанию статическими являются строковые литералы и все глобальные переменные (объявленные вне тела функций).
Дата добавления: 2015-02-16; просмотров: 141 | Поможем написать вашу работу | Нарушение авторских прав |