Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Языки программирования.docx
Скачиваний:
28
Добавлен:
17.03.2015
Размер:
50.42 Кб
Скачать

Объявление указателей.

Указатели тоже должны быть объявлены в программе. Общий вид: класс памяти тип * имя. Пример: int*iptriptr– указатель на объект типаint, этим объектом может быть простая переменная типаint, массив того же типа или блок памяти полученный в данном распределении.

Другие примеры: staticfloat*f;

Extern double *z;

Extern char *ch;

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

Классы памяти.

Класс памяти определяет порядок размещения объекта в памяти. Язык C++ располагает 4мя спецификаторами класса памяти этоauto,register,static,extern.

Динамический класс памяти

Статический класс памяти

Автоматический

Регистровый

Локальный

Глобальный

Auto

register

Static

extern

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

Register– применяется к объектам, по умолчанию располагаемых в локальной памяти. Представляет собой просьбу транслятору (если это возможно) о размещении значений объектов в регистрах процесса. Если по какой-либо причине в момент начала выполнения кода регистры оказываются занятыми, объекты размещаются в локальной памяти, аналогичноAuto.

Static– определяемый объект располагается по фиксированному адресу. Тем самым обеспечивается существование объекта с момента его определения и до конца выполнения программы. Объект со спецификаторомstaticлокален в одном программном модуле.

Extern– спецификатор внешнего статистического класса памяти. Объект существует с момента его определения до конца выполнения программы. Объект, объявленный с данным спецификатором доступен во всех модулях программы, т.е. глобален. Для получения адреса какого-либо объекта используется операция &. Эта операция позволяет присваивать указателям адреса объекта.

Доступ к объекту через указатель. Выполняется с помощью унарной операции *, которая называется операцией разадресации или операцией обращения по адресу. Операция * рассматривает свой операнд как адрес некоторого объекта и использует этот адрес для выборки содержимого. Другими словами * означает извлечь содержимое по адресу, на который указывает указатель. Для вывода адреса памяти, содержащегося в указателе, используется спецификатор формата %p. Пример программы, которая будет выводить значение указателя и объекта, на который она указывает.

Main()

Int x, *px;

Px=&x;

X=35;

Printf(“адрес х %p”, &x);

Printf(“значение указателя %p”,px);

Printf(“значение х %d”,x);

Printf(“значение, адресуемое указателем %d”, *px);

}

Унарная операция разадресации * может быть использована в левой части оператора присваивания, чтобы запомнить какие-либо данные в области памяти, на которые указывает указатель. Пример:

Floaty, *py=&y;

*py=-1,2; это присвоение значения 1,2 по адресу, хранящемуся в указателе.