Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С Живицкая (Мет пособие).doc
Скачиваний:
112
Добавлен:
15.06.2014
Размер:
2.11 Mб
Скачать

2.4. Указатели.

Указатель – это переменная содержажая адрес. Память типичной ЭВМ представляет собой массив последовательно пронумерованных и проадресованных ячеек с которыми можно работать по отдельности или связанными пучками. Указатель – это группа ячеек (как правило 2 или 4), в которых может храниться адрес. Всего существует два способа доступа к переменным:

1) ссылка на переменную;

2) использование механизма указателей;

Указатель-переменная – это переменная, предназначенная для хранения адресов памяти.

Указатель-константа – это значение адреса оперативной памяти.

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

Например:если переменная по адресу 1000 указывает на переменную по адресу 1004, то по адресу 1000 будет находиться значение 1004

Адрес памяти

Содержание

1000

1004

1001

1002

1003

1004

Стандартный вид обьявления указателя

Формат: тип * имя;

где тип - это любой допустимый тип (базовый тип) указателя, имя - имя переменной указателя. Базовый тип указателя определяет тип переменной на которую указывает указатель.

2.4.1.Операторы для работы с указателями.

Для работы с указателями имеются операторы &, *.

&– это унарный оператор, возвращающий адрес оператора.

Пример:

a = & cn;

Данный оператор помещает адрес переменной cn в a. Данный адрес соответствует внутреннему положению переменных в компьютере. Он ничего не делает со значением cn.

Операцию & можно рассматривать, как (взятие адреса) => оператор присваивания в данном примере можно прочитать как ,,a получает адрес cn". Предположим, что переменная cn использует адрес 2000 для хранения своего значения. Предположим, что значение cn 100, в результате этих предположений а получит значение 2000.

*– это унарный оператор, возвращающий значение переменной находящейся по указанному адресу. Если а содержит адрес переменной cn, то q=*a; поместит значение cn в q.

Следуя выше приведенному предположению, q получит значение 100, т.к. 100 хранится по адресу 2000, являющимся адресом хранящимся в q. Оператор * можно рассматривать, как (по адресу). В данном случае оператор можно прочитать, как q получает значение по адресу а.

ЗАМЕЧАНИЕ ПО ПРОГРАММИРОВАНИЮ.

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

Например: При объявлении указателя на тип int компелятор предполагает, что любой адрес, содержащийся в переменной указывает нацелочисленные значения.

2.4.2.Выражение с указателями.

В целом выражение использующие указатели подчиняются тем же правилам, что и обычные выражения " C ".

1) Присваивание указателей, как и обычные переменные указатели могут использоваться с правой стороны оператора присваивания для присвоения значения другому указателю.

Пример:

# include < stdio.h >

int main (void)

{ int x;

int * p1, * p2;

p1 = & x;

p2 =p1;

/ * Вывод адресов хранящихся в p1 и p2. Они будут одинаковы * /

print(" %p%p",p1,p2);

return 0;

}

Здесь p1 и p2 содержат адрес x.