Простой пример, что обозначает модификатор const при определении указателя:
void Foo( int * ptr,
int const * ptrToConstData,
int * const constPtr,
int const * const constPtrToConstData )
{
// OK: изменяются данные, на которые указывает указатель
*ptr = 0;
// OK: изменяется указатель (т. е. изменяется адрес, содержащийся в указателе)
ptr = NULL;
// Ошибка: невозможно изменить данные, на которые указывает указатель
*ptrToConstData = 0;
// OK: изменяется указатель (т. е. изменяется адрес, содержащийся в указателе)
ptrToConstData = NULL;
// OK: изменяются данные, на которые указывает указатель
*constPtr = 0;
// Ошибка: невозможно изменить указатель (т. е. невозможно изменить адрес,
// содержащийся в указателе)
constPtr = NULL;
// Ошибка: невозможно изменить данные, на которые указывает указатель
*constPtrToConstData = 0;
// Ошибка: невозможно изменить указатель (т. е. невозможно изменить адрес,
// содержащийся в указателе)
constPtrToConstData = NULL;
}