alterando o valor const em C

Acho que no seguinte trecho de código

const int i = 2;  
const int* ptr1= &i;  
int* ptr2 = (int*)ptr1;  
*ptr2 =3;

iO valor de muda para 3. O que eu gostaria de saber é por que isso é permitido. Quais são as situações em que isso pode se tornar útil?