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

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

.pdf
Скачиваний:
73
Добавлен:
09.06.2015
Размер:
2 Мб
Скачать
☆

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