Статические переменные. Класс хранения static
В противоположность автоматическим статические объекты существуют все время, пока выполняется программа. Обычно таким объектам компилятор выделяет ячейки памяти в фиксированных сегментах данных в соответствии с используемой при компиляции моделью памяти. По умолчанию статическими объектами являются строковые литералы. Любой объект данных может быть явно отнесен к классу памяти static. При этом объект может оставаться локальным.
По умолчанию все объекты, отнесенные к статической памяти, будут инициализироваться нулевыми байтами. Если при описании статической переменной ей присваивается начальное значение, то это значение «впечатывается» в ячейки памяти, выделенные для переменной. Затем при загрузке программы инициализирующие статический объект байты переносятся в оперативную память компьютера.
Приведем пример программы с использованием статических переменных с локальной областью определения:
/* Prim7_3.cpp */
#include <stdio.h>
void example(int);
void main(void)
{
int count;
for( count = 9; count >= 5; count -=2)
example(count);
}
void example(int c)
{
int f = 1; static int stat = 1;
printf("c = %d, f = %d, stat = %d\n", c, f, stat);
stat++; f++;
}
При выполнении программы будут получены следующие результаты:
c = 9, f = 1, stat = 1
c = 7, f = 1, stat = 2
c = 5, f = 1, stat = 3
Обратите внимание на то, что значение статической переменной stat после выхода из функции example() не «забывается», как это имеет место для переменной f. Переменная f – автоматическая переменная, которой при каждом вхождении в функцию вновь присваивается значение 1. Инициализация же статической переменной stat производится только однажды – при загрузке программы.
Статические объекты невидимы из других функций и не могут этими функциями модифицироваться. Это дает возможность создавать функции-«менеджеры» ресурса: менеджеры очередей, менеджеры памяти и пр. Для доступа к ресурсу обязательно требуется вызов менеджера, так как управляемый ресурс невидим из других функций.
И, наконец, объекты с динамическим временем жизни создаются и разрушаются специальными функциями динамического управления памятью при выполнении программы. Физически динамические объекты располагаются в специально зарезервированной области памяти, называемой «куча» (heap).
Структуры, объединения и перечисления
Общие положения
Структуры и объединения – это один из примеров составных типов данных, называемых агрегатными типами, или просто агрегатами.
Структурные переменные, или просто структуры, - это объединение одной или более переменных, возможно, разных типов, в одну область памяти, имеющую для простоты одно имя. Отдельные составные части структурной переменной будем далее называть полями.
Объединения подобны структурам в том, что содержат поля различных типов, но помещаемые в одно и то же место памяти. Фактически объединения – это доступ к одному и тому же месту памяти, но по разному.
Перечисления подобны структурам и объединениям в том, что задают особый тип данных, хотя и служат другим целям – созданию списков именованых целых констант.
Дата добавления: 2017-01-29; просмотров: 503;