Чтобы ответить на этот и многие другие вопросы о const и указателях, вы должны понять кое-что базовое.Сначала я объясню это в устной форме, а затем на примере:
Объект указателя может быть объявлен как указатель const или указатель на объект const (или оба):
A константный указатель нельзя переназначить, чтобы он указывал на объект, отличный от того, которому он был изначально назначен, но его можно использовать для изменения объекта, на который он указывает (называемого "указателем").Таким образом, ссылочные переменные являются альтернативным синтаксисом для указателей констант.
Указатель на константный объект , с другой стороны, может быть переназначен для указания на другой объект того же типа или конвертируемоготипа, но его нельзя использовать для изменения какого-либо объекта.
A const-указатель на const-объект также может быть объявлен и не может быть использован для изменения указателя или переназначения для указания надругой объект.
Пример:
void Foo( int * ptr,
int const * ptrToConst,
int * const constPtr,
int const * const constPtrToConst )
{
*ptr = 0; // OK: modifies the "pointee" data
ptr = 0; // OK: modifies the pointer
*ptrToConst = 0; // Error! Cannot modify the "pointee" data
ptrToConst = 0; // OK: modifies the pointer
*constPtr = 0; // OK: modifies the "pointee" data
constPtr = 0; // Error! Cannot modify the pointer
*constPtrToConst = 0; // Error! Cannot modify the "pointee" data
constPtrToConst = 0; // Error! Cannot modify the pointer
}