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

лекции программирование / polevoy_cpp_2012_spring_lecture_03

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

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

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

пример:

data[i]

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

пример:

*(pData + i)

25.02.2012

cppNewb.ru

11

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

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

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

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

25.02.2012

cppNewb.ru

12

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

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

результат разыменования не

определен, если адрес вне массива

25.02.2012

cppNewb.ru

13

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

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

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

25.02.2012

cppNewb.ru

14

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

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

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

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

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

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

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

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

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

25.02.2012

cppNewb.ru

15

Указатель (в функциях)

параметр

возвращаемое значение

пример:

int* min(const int* pLhs, const int* pRhs)

{

// проверить != 0 для обоих аргументов return (*pLhs < *pRhs )? pLhs : pRhs;

}

25.02.2012

cppNewb.ru

16

Указатель на константу и константный указатель

• указатель на константную переменную

const T* p = 0;

• константный указатель

/// д.б. инициализирован

T* const pC = &obj;

• константный указатель на константную переменную

/// д.б. инициализирован

const T* const pC = &obj;

25.02.2012

cppNewb.ru

17

Передача и возвращение адресов (указатели и ссылки)

позволяет избежать накладных расходов на копирование

требует дополнительного контроля доступа и изменений

25.02.2012

cppNewb.ru

18

Объект, указатель или ссылка?

если тип не фундаментальный, используйте ссылку или указатель (избегайте лишних объектов)

предпочитайте ссылки

если объекта может не существовать, используйте указатель

помните о константности

25.02.2012

cppNewb.ru

19

Память (статическая, стек, куча)

статическая память (при компиляции)

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

статические переменные

стек

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

локальные переменные

куча (heap)

динамическое распределение new/delete

25.02.2012

cppNewb.ru

20