polevoi_cpp_2013_spring_lecture_03
.pdfСтруктурное и процедурное программирование
(с использованием 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 |