Лабораторная работа: Модульное программирование

6.1 Линейное уравнение

6.2 Четные элементы массива

6.3 Нахождение простых чисел

6.4 Количество вхождений подстроки в строку

6.5 Произведение матриц

7. Дополнительные задания

Библиографический список

1. Классы памяти идентификатора

С каждым объектом памяти переменной связаны следующие понятия: область действия, область видимости и продолжительность жизни. Эти три понятия объединяются в понятие класс памяти переменной. Класс памяти устанавливается синтаксисом и местом размещения определения этой переменной.

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

Объекты классов auto и register имеют локальное время жизни. Спецификаторы static и extern определяют объекты с глобальным временем жизни.

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

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

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

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

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

Пример:

/* объявления переменной i на внутреннем уровне с классом памяти static. */

/* исходный файл file1. c */

main ()

{...

}

fun1 ()

{ staticinti=0;...

}

/* исходный файл file2. c*/

fun2 ()

{ static int i=0;...

}

fun3 ()

К-во Просмотров: 392
Бесплатно скачать Лабораторная работа: Модульное программирование