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

Тема 6. Классы памяти и разработка программ.

График выполнения и сдачи заданий по дисциплине | Типы данных в языке Си. | Использование функции printf( ) и scanf( ). | Операторы языка Си | Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue. | Тема 8. Использование указателей при обработке одномерных и двумерных массивов. | Тема 9. Символы и строки в Си. | Тема 11. Структуры данных в Си. | Тема 12. Динамические структуры данных. | Тема 13. Работа с файлами в Си. |


Читайте также:
  1. D) наиболее страдающими от акционерной спекуляции являются недостаточные классы населения, несущие торговому делу свои последние сбережения (Г.Ф. Шершеневич).
  2. А как вы считаете пользовались ли они преимуществами этих программ. Вот эта информированность с одной стороны и возможность их использования этих программ?
  3. Авторская разработка
  4. Анализатор механизма очистки внешней памяти НКВД 2.4
  5. В зависимости от количества поданных заявок, некоторые возрастные классы могут быть объединены.
  6. Встречи, группы, классы
  7. Выбор и разработка маршрута

Класс памяти определяет область действия переменной и продолжительность ее существования в памяти. Класс памяти устанавливается при описании переменной с соответствующим ключевым словом. Ранее при рассмотрении функций было отмечено, что переменные, описанные в функции как локальные переменные, доступны только внутри функции. Для того, чтобы использовать переменную в нескольких функциях, необходимо описать ее как внешнюю переменную. Переменные, определенные вне функции, являются внешними и имеют глобальную область действия. Каждая переменная имеет тип, а также она принадлежит к некоторому классу памяти. Для описания классов памяти используется четыре ключевых слова: для описания внешнего класса используется ключевое слово extern, для автоматического класса – слово auto, для описания статического класса – слово statiс и для описания регистрового класса – register. Рассмотрим свойства переменных, относящихся к определенному классу памяти.

Автоматические переменные. Переменные, описанные внутри функции, считаются относящимися к классу auto, если нет другого явного описания класса памяти, то есть по умолчанию переменные, описанные в функции, являются автоматическими. Иногда переменные описывают явно с использованием слова auto, для того чтобы показать, что переменная описана только внутри этой функции. Ключевое слово auto указывается перед спецификацией типа переменной в описании переменной. Автоматические переменные имеют локальную область действия и начинают существовать при вызове функции, содержащей ее. При завершении работы функции автоматические переменные исчезают, а ячейки памяти, выделенные для автоматических переменных, могут снова использоваться для других переменных. (Переменные, описанные в начале функции доступны в пределах функции)

Внешние переменные. Переменная, описанная вне функции, является внешней. Внешнюю переменную можно описать в функции, которая использует ее, при помощи ключевого слова extern.

int l;

main()

{ extern int l;

scanf(“%d”,&l);

while(l!=20)

pr();

printf(“Поиск завешен \n”); }

pr()

{ extern int l;

printf(“Введите новое число \n”);

scanf(“%d”,&l); }

Если в функции pr() описание переменной l будет отсутствовать, внешняя переменная l будет известна в функции pr() по умолчанию. Если в функции main() и функции pr() ключевое слово extern не будет включено в описание переменной l внутри функции, то под этим именем создается новая автоматическая переменная. Внешняя переменная l не известна будет этим функциям. Если слово extern опущено в описании переменной l в функции pr(), тогда переменная l, которая находится в main() функции, никогда не получит нового значения.

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

main()

{ int k;

for (k=1; k<=5; k++)

{ printf (“Интерация %d:\n”,k);

prnv(); }

}

prnv()

{ int av=1;

static int stv=1;

printf(“av=%d stv=%d\n”, av++, stv++); }

Функция prvn увеличивает каждую переменную после печати ее значения. Статическая переменная stv «помнит», что ее значение было увеличено по 1, в то время как для переменной av начальное значение устанавливается каждый раз заново. Это указывает на разницу в инициализации: av инициализируется каждый раз, когда вызывается функция prnv(), в то время как stv инициализируется только один раз при компиляции функции prnv().

Итерация 1:

av=1 stv=1

Итерация 2:

av=1 stv=2

Итерация 3:

av=1 stv=3

Итерация 4:

av=1 stv=4

Итерация 5:

av=1 stv=5

Итерация 6:

av=1 stv=6

Регистровые переменные. Обычно переменные хранятся в памяти машины. Регистровые переменные запоминаются в регистрах центрального процессора, где доступ к ним и работа с ними выполняются гораздо быстрее, чем в памяти. В остальном регистровые переменные аналогичны автоматическим переменным. Они создаются следующим образом:

main()

{ register int rv;

……….. }

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

 

Классы памяти Ключевое слово Продолжительность существования Область действия
Автоматический auto Временно Локальная
Регистровый register Временно Локальная
Статический static Постоянно Локальная
Внешний extern Постоянно Глобальная (все файлы)
Внешний статический static Постоянно Глобальная (один файл)

Основная литература: 1осн[193-199], 2осн[291-298], 3осн[69-80]

Дополнительная литература: 9доп[254-261]


Контрольные вопросы:

1. Какие переменные сохраняются в регистрах центрального процессора?

2. Для чего предназначены классы памяти?

3. Какие переменные имеют локальную область действия и перестают существовать после окончания работы функции?

4. Чем отличаются статические переменные от автоматических?

5. Чем отличаются регистровые переменные от автоматических?


Дата добавления: 2015-11-04; просмотров: 68 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.| Тема 7. Указатели в Си.

mybiblioteka.su - 2015-2024 год. (0.007 сек.)