Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
17.04.2015
Размер:
78.15 Кб
Скачать

3. Определение указателя.

Указатель-это переменная или константа, которая содержит значение адреса другой переменной.

 

Рис. 1. Графическая интерпретация указателя.

Никогда не следует использо вать неинициализированные указатели, потому что это приводит к ошибкам, которые весьма трудно поддаются отладке.Инициализация указателей более актуальна, чем переменных, так как поведение программы, имеющей неопределённые указатели, непредсказуемо и часто вызывает зависание системы.

 

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

Указатель-это переменная или константа стандартного типа данных для хранения адреса переменной определённого типа. Тип адресуемой переменной может быть стандартный, перечислимый, структурный, объединение или void. Указатель на тип void может быть адрес.

Форма объявления переменной типа указатель:

тип [модификатор] *

где :

тип-имя типа переменной, адрес которой будет содержать переменная- указатель.(например integer, char, long)

имя-указателя –идентификатор переменной типа указатель.(имя собственное)

*- определяет переменную типа указатель.

 Значение переменной-указателя-это адрес некоторой величины, целое без знака. При выводе значения указателя надо использовать формат %u. Указатель содержит адрес первого байта переменной определённого типа. Тип адресуемой переменной, на которую ссылается указатель, определяет объём оперативной памяти, выделяемой переменной, связанной с указателем. Для того, что бы машинной программой обработать (например прочитать или записать) значение переменной с помощью указателя, надо знать адрес её начального (нулевого) байта и количество байтов, которая занимает эта переменная. Ну и указатель естественно содержит эти данные.

Сам указатель содержит адрес нулевого байта этой переменной, а тип адресуемой переменной определяет, сколько байтов, начиная с нулевого (адреса, определённого указателем) занимает это значение.

Примеры объявлений даны на рис.2.

Рис. 2. Примеры объявлений указателей.

5. Операции получения адреса и значения.

Язык Си даёт возможность использования адресов переменных программы с помощью основных операций: & и *

&-получение адреса переменной.

*-извлечение значения, расположенного по этому адресу.

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

Операции * и & можно писать вплотную к имени операнда или через пробел.Например: &i, *ptri.

Назначение этих операций:

&-имя переменной-получение адреса, определяет адрес размещения значения переменной определённого типа. Операндом операции & должно быть имя переменной того же типа, для которой определён и указатель левой части оператора присваивания, получающий значение этого адреса.

*-имя указателя-получение значения определённого типа по заданному адресу. Определяет содержимое, находящееся по адресу, который содержится в указателе-переменной или указателе-константе. Иначе: косвенная адресация. Косвенная адресация значения с помощью операции * осуществляет доступ к значению по указателю, то есть извлечение значения, расположенного по адресу-содержимому указателя. Операнд *(т.е имя после этого значка) должно быть типа указатель(где-то раньше объявлено).

Оператор присваивания значения адреса указателю(иначе инициализация указателя) имеет вид:

имя указателя_переменной=&имя_переменной

Например: int *ptri,i; //объявление указателя и переменной типа int

ptri=&i; //ptri получает значение адреса ‘i’

В общем виде оператор присваивания, использующий имя указателя и * операцию косвеной адресации, можно представить в виде:

Имя_переменной=*имя_указателя

Где имя-указателя –это переменная или константа, которая содержит адрес размещаемого значения, требуемого для переменной левой части оператора присваивания.

Например: i=*ptri; // ‘i’ получает значение, расположенное по адресу содержащемся в указателе‘ptri’

Как и любые переменные, переменная типа указатель ptri имеет адрес и значение.

Схематично взаимосвязь между указателям и адресуемым значением представлениа на рис.3

 

Рис. 3. Взаимосвязь указателя, адреса и значения переменной.

Указатели можно использовать:

*ptri-значение переменной, находящейся по адресу, содержащемуся в указателяе ptri

ptri-значение адреса переменной

&ptri-адрес местоположения самого указателя