Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Programmirovanie_-_1_kurs / Лекции (опорный конспект)

.pdf
Скачиваний:
69
Добавлен:
09.06.2015
Размер:
2.39 Mб
Скачать

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

Операция разыменования (*) позволяет обратиться к значению, записанному в области памяти, на которую ссылается указатель

1)

4) int

a =

1;

double

b =

7.6;

void*

ptr;

2)

3)

ptr = &a;

cout << *( (int*)ptr ) << "\n";

ptr = &b;

*( (double*)ptr ) /= 5; cout << b << "\n";

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

5)

71

7.4. Операции над указателями (1)

Операция

Выражение

 

Результат

Описание

 

 

 

 

 

 

Равно (==)

 

указатель1

==

true/false

Сравнивает два указателя на равенство адресов

 

 

указатель2

 

 

 

 

 

 

 

 

Не равно (!=)

указатель1

!=

true/false

Сравнивает два указателя на неравенство адресов

 

 

указатель2

 

 

 

 

 

 

 

 

Меньше (<)

указатель1

<

true/false

Возвращает истину, если адрес, на который ссылается

 

 

указатель2

 

 

указатель1 меньше адреса, на который ссылается

 

 

 

 

 

указатель2

 

 

 

 

 

 

Меньше

или

указатель1

<=

true/false

Возвращает истину, если адрес, на который ссылается

равно (<=)

 

указатель2

 

 

указатель1 меньше или равен адресу, на который

 

 

 

 

 

ссылается указатель2

 

 

 

 

 

Больше (>)

указатель1

>

true/false

Возвращает истину, если адрес, на который ссылается

 

 

указатель2

 

 

указатель1 больше адреса, на который ссылается

 

 

 

 

 

указатель2

 

 

 

 

 

 

Больше

или

указатель1

>=

true/false

Возвращает истину, если адрес, на который ссылается

равно (>=)

 

указатель2

 

 

указатель1 больше или равен адресу, на который

 

 

 

 

 

ссылается указатель2

 

 

 

 

 

Вычитание (–)

указатель1

целое

Вычисляет количество элементов заданного типа

 

 

указатель2

 

число

между указателями

 

 

 

 

 

Вычитание (–)

указатель

указатель

Вычисляет указатель, отстоящий от заданного на

 

 

целое_число

 

 

определенное количество элементов (в соответствии с

 

 

 

 

 

типом указателя)

Сложение (+)

указатель

+

указатель

72

 

 

целое_число

 

 

 

 

 

 

 

 

 

 

 

 

 

7.4. Операции над указателями (2)

1)

2)

3) int

a

=

1;

int

b

=

1;

int* ptr1 = &a; int* ptr2 = &b;

cout << ptr1 << "\n"; cout << ptr2 << "\n";

if (ptr1 < ptr2)

cout << "ptr1 < ptr2";

73

 

7.4. Операции над указателями (3)

4)

0012FEA8

0012FEB0

0012FEC0

5) int Y[10];

int* ptr1

= &(Y[2]);

 

 

int* ptr2

= &(Y[5]);

 

 

cout

<< ptr1 <<

endl;

 

 

 

0012FE90

 

 

 

0012FE9C

cout

<< ptr2 <<

endl;

 

 

 

3

 

 

int x = ptr2 - ptr1; cout << x;

74

7.5.Указатели и массивы

Имя объявляемого массива всегда ассоциируется компилятором с адресом его самого первого элемента

1)

2)

3)

4) const int N=10; int A[N];

for (int i=0; i<N; i++)

{

int* ptr = A+i; *ptr = i*i;

}

for (int i=0; i<N; i++) cout << A[i] << " ";

75

7.6.Применение sizeof к указателям

7.7.Указатели на указатели

К указателям можно применять оператор sizeof

1)

Указатель может ссылаться на переменную, которая, в свою очередь, также является указателем

2)

76

7.8.Ссылки

Ссылка – особая переменная, являющаяся скрытой формой указателя, который при использовании автоматически разыменовывается

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

77

7.9.Динамическое выделение памяти

7.9.1.Области памяти

Области памяти:

область кода

машинный код программы

область данных

глобальные переменные

строковые константы

стек

локальные

переменные

параметры вызова функций

куча

динамические

переменные

Динамические

переменные:

Размещаются в области памяти «куча»

Создаются с помощью специальных

функций/операторов

Не имеют имени

Доступ к переменным осуществляется по указателю

78

7.9.2.Функции malloc, calloc, free

Функции malloc и calloc выделяют в памяти область заданного размера

Функция free освобождает заданную область памяти

79

7.9.2.1 Пример динамического выделения памяти (1)

80