Лекции по проге / 10_1_Указатели_Основы
.pdf
Константные указатели
●Константный указатель - это указатель, который нельзя направить на другой адрес памяти, но значение по этому адресу менять можно:
<базовый тип> * 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
