Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_1_10 / Лекция 06.pptx
Скачиваний:
39
Добавлен:
21.05.2015
Размер:
589.2 Кб
Скачать

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

Со значениями указателей можно выполнять операции сложения и вычитания, используя в качестве второго операнда целочисленные значения. Выражение

p1 = p1 + 9;

заставляет p1 ссылаться на девятый элемент базового типа указателя p1 относительно элемента, на который p1 ссылался до выполнения этой инструкций.

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

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

// Демонстрация арифметических операций

над указателями.

#include <iostream> using namespace std; int main()

{

int *i, j[10];

double *f, g[10];

int x;

i = j;

f = g;

for(x=0; x<10; x++)

cout << i+x << ' ' << f+x << '\n';return 0;

}

0012FE5C 0012FE84 0012FE60 0012FE8C 0012FE64 0012FE94 0012FE68 0012FE9C 0012FE6C 0012FEA4 0012FE70 0012FEAC 0012FE74 0012FEB4 0012FE78 0012FEBC 0012FE7C 0012FEC4 0012FE80 0012FECC

Узелок на память

Все арифметические операции над

указателями выполняются относительно базового типа указателя.

#include <iostream> using namespace std; int main()

{

int var = 123; // инициализация переменной var числом

123

int *ptrvar = &var; // указатель на переменную var

(присвоили

адрес переменной

указателю)

cout

<< "&var

= "

<<

&var << endl;// адрес

переменной

var содержащийся

в памяти, извлечённый

операцией взятия адреса

 

 

cout

<< "ptrvar

= "

<<

ptrvar << endl;// адрес

переменной

var, является

значением указателя ptrvar

cout

<< "var

= "

<<

var << endl; // значение в

переменной

var

 

 

 

cout

<< "*ptrvar = "

<<

*ptrvar << endl; // вывод

значения

содержащегося в

переменной var через указатель,

операцией разименования указателя

system("pause");

 

 

 

return

0;

 

 

 

}

 

 

 

 

 

&var

= 0x22ff08

ptrvar

= 0x22ff08

var

=

123

*ptrvar =

123

#include <iostream> using namespace std; int main()

{

int var1 = 123; // инициализация переменной var1

int var2 = 99;

// инициализация

переменной var2

int *ptrvar1 =

&var1; // указатель

на

переменную var1

int *ptrvar2 =

&var2; // указатель

на

переменную var2

cout << "var1

 

= " <<

var1 <<

endl;

 

cout << "var2

 

= " <<

var2 <<

endl;

 

cout << "ptrvar1 = " <<

ptrvar1

<<

endl;

cout << "ptrvar2 = " <<

ptrvar2

<<

endl;

if (ptrvar1 >

ptrvar2) // сравниваем значения

указателей, то

есть адреса переменных

 

cout <<

"ptrvar1

> ptrvar2"

<<

endl;

if (*ptrvar1 >

*ptrvar2) // сравниваем значения

переменных, на

которые ссылаются

указатели

cout <<

"*ptrvar1 > *ptrvar2" << endl;

system("pause");

 

 

 

 

return 0;

}

var1

=

123

var2

=

99

ptrvar1 = 0x22ff04 ptrvar2 = 0x22ff00 ptrvar1 > ptrvar2

*ptrvar1 > *ptrvar2

#include

<iostream>

 

 

using namespace std;

 

 

Int main()

 

 

{

 

 

 

int var = 123; // инициализация переменной var числом 123

int *ptrvar = &var; // указатель на переменную var

 

int **ptr_ptrvar = &ptrvar; // указатель на указатель на

переменную var

 

 

int ***ptr_ptr_ptrvar = &ptr_ptrvar;

 

cout

<< " var\t\t= " << var << endl;

 

cout

<< " *ptrvar\t= " << *ptrvar << endl;

 

cout

<< " **ptr_ptrvar

= " << **ptr_ptrvar << endl; //

два раза

разименовываем указатель, так как он второго порядка

cout

<< " ***ptr_ptrvar

= " << ***ptr_ptr_ptrvar <<

endl; //

указатель третьего порядка

 

cout

<< "\n ***ptr_ptr_ptrvar -> **ptr_ptrvar -> *ptrvar

->

var -> "<< var << endl;

 

cout

<< "\t " << &ptr_ptr_ptrvar<< " -> " << "

" <<

&ptr_ptrvar << " ->" << &ptrvar << " -> " << &var << " -> " << var << endl;

system("pause"); return 0;

}

var

= 123

*ptrvar

= 123

**ptr_ptrvar

=

123

***ptr_ptrvar

=

123

***ptr_ptr_ptrvar -> **ptr_ptrvar -> *ptrvar -> var -> 123

0x22ff00 -> 0x22ff04 ->

0x22ff08 -> 0x22ff0c -> 123

Соседние файлы в папке lekcii_1_10