Diferencia entre const int*, int * const y const int * const en C++
¡Hola a todos! Acabo de empezar a aprender C++ y no puedo entender la palabra clave `const` en el contexto de punteros. Veo tres declaraciones diferentes y me confundo completamente:\n\n1. `const int* ptr;`\n2. `int* const ptr;`\n3. `const int* const ptr;`\n\n¿Por qué significan cosas diferentes? ¿Cuál de ellos permite cambiar el valor al que apunta el puntero, y cuál permite cambiar el puntero mismo? Escribí un pequeño ejemplo:\n\n```cpp\nint a = 10;\nint b = 20;\n\nconst int* p1 = &a;\n// *p1 = 30; // error, si se descomenta\np1 = &b; // funciona\n\nint* const p2 = &a;\n*p2 = 30; // funciona\n// p2 = &b; // error, si se descomenta\n\nconst int* const p3 = &a;\n// *p3 = 30; // error\n// p3 = &b; // error\n```\n\n¿Entiendo correctamente que `const` a la izquierda del asterisco protege los datos, y a la derecha protege el puntero?