Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Л13_Указатели_РЕ1_С+р.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
110.59 Кб
Скачать

Int *temp, I, *z;

float f ,*ptr;

Здесь объявлены указатели ch, temp, z, ptr и переменные i и f .

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

Рассмотрим пример объявления и инициализации указателя.

#include <iostream.h>

Int main()

{

float c=57.97;

float *pc=&c;

long temp=340;

long *plong;

plong=&temp;

cout<<c<<’ ‘<<&c<<endl;

cout<<” “<pc<<endl;

cout<<temp<<’ ‘<<&temp<<endl;

cout<<” “<plong<<endl;

}

Результат выполнения программы.

57.97 0x0012FF7C

0x0012FF7C

340 0x0012FF74

0x0012FF74

В приведенной программе объявляется переменная с типа float и будет инициализироваться значением 57,97. Потом объявляется указатель на данные типа floatpc, значение которого назначается равным адресу переменной с. Затем объявляется переменная temp типа long и указатель plong на тот же тип. После чего проводится инициализация указателя plong адресом переменной temp.

2. Разыменование указателей.

Указатели помогают осуществлять непосредственный доступ к памяти. Для того чтобы получить (прочитать) значение, записанное по адресу, который находится в указателе, используют операцию непрямого обращения или разыменования (*). Для этого используется имя указателя со звездочкой перед ним.

Пример.

#include <iostream.h>

int main()

{

float x=10.1, y;

float *pf;

pf=&x;

y=*pf;

cout<<”= “<x<<endl;

cout<<”= “<y<<endl;

}

После выполнения программы на экран будет выдана следующая информация.

х= 10.1

y= 10.1

3. Операции с указателями.

Язык С++ позволяет работать с указателями также, как и с переменными стандартных типов. Однако операции над указателями требуют знания некоторых особенностей. Рассмотрим эти особенности.

Операция присвоения.

Указатели одного и того же типа могут использоваться в операциях присвоения, как и другие любые переменные.

Пример.

#include <iostream.h>

int main()

{

int x=10;

int *p, *g;

p=&x;

g=p;

cout<<”p= “<p<<endl;

cout<<”g= “<g<<endl;

cout<<”x= “<x<< “ *g= “<*g<<endl;

}

После выполнения программы на экран будет выдана следующая информация.

p= 0x0012FF7C

g= 0x0012FF7C

x= 10 *g= 10

Арифметические операции

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

Р1 + n (P1-n) – вычисление указателя, отдаленного от заданного на определенное n число элементов. Здесь n – целое.

Пусть указатель Р1 имеет значение 2000 и указывает на целое. Тогда, в результате выполнения оператора Р1 + 3; значение указателя Р1 будет равно 2012 (если под int отводится 4 байта).

Общая формула для вычисления значения указателя после выполнения операции Р = Р + n будет иметь вид:

Р = Р + n*k;

где k – количество байт памяти базового типа указателя.

Другой операцией является операция вычитания

Р2 – Р1 .

Это вычисление числа элементов между указателями.

Операции инкремента (++) и декремента (--) являются частным случаем сложения и вычитания.

Пример.

#include <iostream.h>