logo search
Шпора по информатике / 002

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

Если в любых операторах описания типа переменных видим

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

Тип перед * - это тип переменной, на которую указывает указатель.

Например, оператор

float * yq ; (12.7)

следует читать следующим образом: "игрек-ку" указывает на вещественную переменную.

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

Например, (12.7) можно записать как float* yq ;

и читать так: yq - это указатель на переменную типа float.

Возможны и другие варианты чтения (12.7):

содержимое по адресу yq есть float или "по адресу yq живет float". Так как

операция * , применённая к адресу, даёт значение, то (12.7) можно записать как

float *yq ;

и понимать следующим образом: значение ( *yq ) имеет тип float.

Имя переменной, с которой связан указатель, появляется после присваивания

указателю её адреса: yq = &b; или float* yq = &b; .

С++ разрешает различные операции с адресными переменными, но

эти операции с адресами выполняются по специальным правилам. Например,

вычислим значение (yq +1) для (12.7), см. также рис. 12.3. Если его

вывести на экран, то получим значение 0064FE05, а не 0064FE02 , как при обычном

сложении. Для указателей операция +1 означает адрес следующей переменной.

Рассмотрим простую аналогию обычного применения указателей.

Я могу сказать, что студент Иванов сейчас невнимателен, а могу указать на него,

и сказать : "Вы сейчас невнимательны" , не называя его имени. Другой пример.

Пусть на столе много предметов и, в том числе чья-то газета. Я могу попросить

убрать газету, а могу показать на неё пальцем и попросить:

"Пожалуйста, уберите это." В обоих примерах второй способ соответствует

указателям, т.к. имя самого объекта не используется.

Фрагмент программы с указателем

. . . . . .

float stpnd = 350.5; float doxod, *adr; //2003 г. - 350.5

adr = &stpnd; doxod = *adr; (12.8)

cout << doxod <<" - это мало!\n" << endl; // . . . . . .

В результате получим на экране: 350.50 - это мало!