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

polevoi_cpp_2013_spring_lecture_03

.pdf
Скачиваний:
10
Добавлен:
20.04.2015
Размер:
135 Кб
Скачать
☆

Структурное и процедурное программирование

(с использованием C++)

Полевой Дмитрий Валерьевич к.т.н., доцент КиК

e-mail: oop.misis@gmail.com

Указатель на void

•содержит адрес объекта

•допустимые операции

–присвоение адреса

–сравнение на равенство и неравенство

–явное преобразование к указателю на другой тип

•запрещенные операции

–разыменование

–арифметические операции

16.03.2013

2

Ноль

•ноль (0) имеет тип int

•константа

–арифметический тип

–указатель

•NULL

–использовать запрещено

–макрос

16.03.2013

3

Нулевой указатель

•гарантируется отсутствие объектов с адресом 0

•0 – указатель, который ни на что не ссылается

•разыменование нулевого указателя – ошибка времени исполнения

16.03.2013

4

Доступ к элементам массива

• указатель на массив и индекс

пример:

data[i]

• указатель на элемент массива

пример:

*(pData + i)

16.03.2013

5

Арифметика указателей

•сложение с целым числом

•вычитание целого числа

•вычитание указателей

16.03.2013

6

Сложение и вычитание целых чисел

•“ сдвиг” указателя на заданное число элементов массива

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

16.03.2013

7

Вычитание указателей

•определено только для указателей на элементы одного массива (язык не позволяет быстро проверить)

•число (целое) элементов массива между указателями

16.03.2013

8

Сравнение указателей

•сравнение адресов (==, !=, <, >, <=, >=)

•равенство адресов гарантирует доступ к одному и тому же объекту

•p1 == p2 ↔ 0 == p1p2

16.03.2013

9

Преобразования указателей

• reinterpret_cast<Тип>(выражение)

пример:

bool compare(void* pL, void* pR)

{

T* p(reinterpret_cast<T>(pL));

...

}

16.03.2013

10