Простой пример, что обозначает модификатор const при определении указателя:
void Foo( int * ptr,
int const * ptrToConstData, // const int * 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;
}