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

polevoi_cpp_2013_spring_lecture_03

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

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

(с использованием 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