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

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>