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. Потом объявляется указатель на данные типа float – pc, значение которого назначается равным адресу переменной с. Затем объявляется переменная 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>
