Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема11_Указатели.doc
Скачиваний:
1
Добавлен:
03.09.2019
Размер:
113.15 Кб
Скачать

Тема 9. Указатели Переменные и их адреса

Указатель – это переменная, содержащая адрес другой переменной, но перед тем, как переходить непосредственно к программированию, рассмотрим пример из жизни. Приглашая друга в гости, мы сообщаем ему адрес своего дома; друг записывает адрес на листок бумаги, и этот листок становится указателем на наш дом. По этому указателю любой человек может найти дом, и нам не нужно показывать другу сам дом, например, «приносить его с собой». Таким образом, указатель – это предмет (листок бумаги), содержащий адрес, по которому можно найти другой предмет (дом). Особую выгоду при использовании указателей можно получить в тех случаях, когда предмет, куда указывает указатель большой в каком-либо смысле.

Теперь постараемся понять, что такое адрес переменной. В памяти компьютера переменные хранятся в ячейках, которые имеют свой адрес, представляющий собой номер этой ячейки; чтобы узнать этот номер следует воспользоваться операцией & (амперсанд):

int m=10, n=20, k=30;

float x=12.1, y=45.8, z=67.9;

char a='T', b='*', c=';';

printf("-------------------------------\n");

printf("Имя\tЗначение\tАдрес\n");

printf("-------------------------------\n");

printf("%s\t%d\t\t%d\n", "m", m, &m);

printf("%s\t%d\t\t%d\n", "n", n, &n);

printf("%s\t%d\t\t%d\n", "k", k, &k);

printf("%s\t%g\t\t%d\n", "x", x, &x);

printf("%s\t%g\t\t%d\n", "y", y, &y);

printf("%s\t%g\t\t%d\n", "z", z, &z);

printf("%s\t%c\t\t%d\n", "a", a, &a);

printf("%s\t%c\t\t%d\n", "b", b, &b);

printf("%s\t%c\t\t%d\n", "c", c, &c);

printf("-------------------------------\n");

Заметим, что обращаясь к переменной по имени, мы фактически обращаемся к ячейке памяти, названной этим именем. Тем не менее, для обращения к ячейке памяти не обязательно знать ее имя, а достаточно знать ее адрес. Например, чтобы пригласить человека на концерт, можно посоветовать ему прийти в Оперный театр, а можно отправить его по адресу Красный проспект, 36 (это адрес Оперного театра). Таким образом, можно провести следующую аналогию:

Ячейка памяти

Земля, где находится театр

Имя переменной

Оперный театр

Адрес переменной

Красный проспект, 36

Значение переменной

Здание театра

Описание указателя

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

Для хранения адресов переменных предусмотрены указатели, которые объявляются с использованием символа * (звездочка). Хорошим стилем программирования является использование префикса p_ или ptr_ для имен указателей; это соглашение связано с переводом слова указатель на английский язык – pointer. Подходящими именами для указателей могут быть, например, ptr_x или p_number.