el valor de la variable const se cambia usando un puntero

La salida del siguiente progtwig es 50 en gcc. ¿Cómo es posible que x sea una variable constante y * p sea x en sí mismo? P es un puntero constante que apunta al valor en x. Donde como turbo c da error del comstackdor. ¿Es un comportamiento indefinido? por favor explique.

#include int main() { const int x = 25; int * const p = &x; *p = 2 * x; printf("%d", x); return 0; } 

Es posible cambiarlo, pero el comportamiento no está definido, como se menciona en la norma.

Está en c11 bajo 6.7.3

Si se intenta modificar un objeto definido con un tipo constante calificado mediante el uso de un lvalue con un tipo no calificado, el comportamiento no está definido. Si se intenta referirse a un objeto definido con un tipo calificado volátil mediante el uso de un lvalue con un tipo calificado no volátil, el comportamiento es indefinido.

 int * const p=&x; 

Este no es un progtwig válido. &x es de tipo const int * pero está asignando el valor del puntero a un objeto de tipo int * const : el comstackdor debe emitir una advertencia y se le permite detener la comstackción.