
Int main()
{
int *p;
int x;
p=&x;
cout<<”p= “<<p<<endl;
cout<<”++p= “<<++p<<endl;
}
Вид экрана после выполнения программы:
p= 0x0012FF78
++p= 0x0012FF7C
После выполнения этой программы мы видим, что при операции ++р значение указателя р увеличилось не на 1, а на 4. Это правильно, поскольку новое значение указателя должно указывать не следующий адрес памяти, а адрес следующего целого.
Другие арифметические операции над указателями невозможны.
Сравнение указателей.
Указатели можно сравнивать, применяя все 6 операций сравнение.
P1 = = P2 – сравнение на равенство;
P1 != P2 – сравнение на неравенство;
P1 < P2 – меньше;
P1 < = P2 – меньше или равно;
P1 > P2 – больше;
P1 > = P2 – больше или равно.
Сравнение p < g , например, означает, что адрес, находящийся в p, меньше адреса, находящегося в g.
Операция sizeof
Как и к любой переменной или типу данных, к указателям можно применять операцию определения размера – sizeof. В современных ПК указатель имеет размер 4 байта (32 двоичных разряда) и может адресовать 232 = 4 Гбайт памяти.
К указателям можно применять не только операцию sizeof но и одноименную функцию.
Пример.
#include <iostream.h>
Int main()
{
unsigned long A=546213;
bool T=false;
unsigned long *pA=&A;
bool *pT=&T;
cout<<sizeof pA<<endl;
cout<<sizeof (pA)<<endl;
cout<<sizeof pT<<endl;
cout<<sizeof (pT)<<endl;
}
Вид экрана после выполнения программы:
4
4
4
4
4. Указатели и массивы
В языке С++ принято, что имя массива – это адрес ячейки памяти, начиная с которой располагается массив. Другими словами, имя массива – это адрес первого (нулевого) элемента массива.
Если объявленный массив
int Mas[10];
то Mas является указателем на массив, точнее на первый элемент массива
Mas
Mas [0];
Т. е. , pM = Mas; и pM = Mas[0];
Для того, чтобы получить значение 6-го элемента массива Mas, можно написать
Mas [5] или *(Mas+5) .
Результат будет один и тот же.
Соответствие между двумя формами выражений настолько строгое, что С++ рассматривает элемент массива Mas[n] как *(Mas[0]+n).
Рассмотрим пример программы, которая вводит в память в клавиатуры целочисленный массив, вычисляет сумму его элементов и выводит на экран эту информацию.
Без употребления указателей эта программа будет иметь следующий вид.
#include <iostream.h>
Int main()
{
const int M=50;
int i, m, S, Mas[M];
cout<<"Vvedite razmer massiva m:"<<endl;
cin>>m;
cout<<"Vvedite massiv:"<<endl;
for (i=0; i<m; i++) cin>>Mas[i];
cout<<endl;
S=0;
for (i=0; i<m; i++) S=S+Mas[i];
for (i=0; i<m; i++) cout<<Mas[i]<<' ';
cout<<endl<<"S= "<<S<<endl;
}
Вид экрана после выполнения программы:
Vvedite razmer massiva m:
5
Vvedite massiv:
1 2 3 4 5
1 2 3 4 5
S= 15
Запишем эту программу с использованием указателей.
#include <iostream.h>