Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике.doc
Скачиваний:
118
Добавлен:
02.05.2014
Размер:
1.53 Mб
Скачать

Операции над указателями

Над указателями можно выполнять унарные операции — инкре­мент и декремент. При выполнении операций ++ и -- значение указателя увеличивается или уменьшается на длину типа, на ко­торый ссылается используемый указатель. Например:

int*aP,array[10];

аР=&а[5];

аР++; // Становится равным адресу элемента аггау[6]

--аР; // Становится равным адресу элемента аггау[5]

В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int. При этом результатом операции будет указатель на исходный тип, а его значение будет на задан­ное число элементов больше или меньше исходного. Например:

int*aPl, *aP2,array[10];

inti=2;

aPl=array+(i+4); // Становится равным адресу элементаarray[6]

aP2=aPl-i; // Становится равным адресу элемента аrrау [4]

В операции вычитания могут участвовать два указателя на один и тот же тип. Результат такой операции имеет тип int и равен чис­лу элементов исходного типа между уменьшаемым и вычитае­мым, причем если первый адрес младше, то результат имеет от­рицательное значение. Например:

int *аР1, *аР2, array[10];

int i;

aPl=array+4;

aP2=array+9;

i=aPl-aP2; // Возвращено значение 5

i=aP2-aPl; // Возвращено значение -5

Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, ! =, <, <=, >, >=, при этом значения указателей рас­сматриваются просто как целые числа, а результат сравнения ра­вен 0 (ложь) или 1 (истина). Например:

int*aPl, *аР2, аrrау[10];

аР1=аrrау+5;

аР2=аrrау+7;

if(aPl>aP2) аrrау[3]=4;

В данном примере значение аР1 меньше значения аР2, и поэтому оператор array [3] =4 не будет выполнен.

Указатели на строку

При обработке строк указатели используются достаточно часто. Строка — это массив символов, оканчивающийся null-символом. В нижеприведенной программе определяется функция show_string() для вывода символов строки с помощью указате­ля на строку.

#include <stdio.h>

#include <conio.h>

void show_string(char *String) // Описание функции

{

while(*String) // Пока строка не пуста

putchar(*String++); // Выбирает первый символ из строки и выводит на экран

}

main()

{

show_string( "Example") ; // Передает в функцию некоторую строку

getch(); // Задерживает экран

return0; // Завершает программу

}

Переменная string объявлена в функции как указатель. Указатель увеличивается в простом цикле до тех пор, пока не встретится ко­нец строки. Перед тем как вывести очередной символ, он опреде­ляется в функции посредством операции *. Затем указатель увели­чивается, тем самым ссылаясь на следующий символ.

Указатели на функцию

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

Наиболее общее использование указателей на функции — воз­можность передать адрес функции в качестве фактического параметра другой функции. Указатели на функции объявляются следующим образом:

int(*F1) ();

long(*F2) ();

float(*F3) ();

Обратите внимание на скобки, охватывающие имена переменных. Без них приведенные объявления — это прототипы функций, ко­торые возвращают указатель на указанный тип.