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

Лекции по проге / 10_1_Указатели_Основы

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

Константные указатели

Константный указатель - это указатель, который нельзя направить на другой адрес памяти, но значение по этому адресу менять можно:

<базовый тип> * const <переменная-указатель>

31

Константные указатели

Указатель на постоянное значение - такой указатель можно направить на другой адрес памяти, но значение, на которое он указывает, менять нельзя:

const <базовый тип> * <переменная-указатель> <базовый тип> const * <переменная-указатель>

Возможен константный указатель на постоянное значение

32

Задание

Объявить константный указатель на целое число cpInt

Объявить указатель на постоянное дробное число cpFloat

Объявить константный указатель на постоянный символ ccpChar

33

Объявление константных указателей

 

 

int *

const cpInt; /* указатель менять нельзя, но

 

 

 

 

целое число – можно */

 

 

const

float * cpFloat; /* указатель менять можно,

 

 

 

 

но дробное число – нельзя */

 

 

// или

 

 

 

float

const * cpFloat; /* указатель менять можно,

 

 

но дробное число – нельзя */

 

 

const

char * const ccpChar; /* нельзя менять ни

34

указатель, ни символ */

 

 

Это надо помнить!

Память компьютера можно рассматривать как одномерный массив, а адрес ячейки памяти — как индекс в нем

Имя массива является константным указателем на его первый элемент

Следующие операции эквивалентны

a[i] *(a+i)

35

Это надо помнить!

Если в функцию передать указатель на переменную, то функция сможет ее изменить

При присвоении одного указателя другому они начинают указывать в одно и тоже место. При этом изменения, сделанные через любой указатель будут доступны и через другой

36

Ошибки при компиляции для VS 2008 Russian

нет преобразования '<тип>' в '<тип> *' - вы пытаетесь использовать указатель вместо значения по адресу (вероятно пропущена операция *, либо лишняя операция &)

нет преобразования '<тип> *' в '<тип>' - вы пытаетесь использовать значение там, где необходимо использовать указатель на него (вероятно пропущена операция *, либо лишняя операция &)

37

Ошибки при компиляции для VS 2005 English

cannot convert from '<тип>' to '<тип> *' - вы пытаетесь использовать указатель вместо значения по адресу (вероятно пропущена операция *, либо лишняя операция &)

cannot convert from '<тип> *' to '<тип>' - вы пытаетесь использовать значение там, где необходимо использовать указатель на него (вероятно пропущена операция *, либо лишняя операция &)

38

Ошибки времени выполнения для VS 2008 Russian

Необработанное исключение в "0x004113e5" в "<имя программы>.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc" - вы пытаетесь произвести запись (чтение) по неправильному адресу (не соответствующему адресу переменной, либо элемента массива)

39

Ошибки времени выполнения для VS 2005 English

Unhandled exception at 0x0042f8f0 in <имя программы>.exe: 0xC0000005: Access violation writing location 0xcccccccc - вы пытаетесь произвести запись (чтение) по неправильному адресу (не соответствующему адресу переменной, либо элемента массива)

40