const pointer en C: ejercicio resuelto
const pointer en C: ejercicio resuelto
Si buscas const pointer en C ejercicio resuelto, aquí tienes las tres combinaciones de const con punteros, con ejemplos que muestran qué está permitido y qué el compilador rechaza.
La regla es leer la declaración de derecha a izquierda: el const más cercano al nombre de variable congela el puntero; el const más cercano al tipo base congela el valor apuntado.
Enunciado
Declara y usa las tres variantes:
const int *p— puntero a entero constante (no puede modificar el valor).int * const p— puntero constante a entero (no puede cambiar a dónde apunta).const int * const p— puntero constante a entero constante.
Muestra qué operaciones son válidas e inválidas para cada una.
Solución en C
Resultado esperado
Errores frecuentes
- Confundir qué es constante:
const int *pcongela el valor, no el puntero;int * const pcongela el puntero, no el valor. - Asignar un puntero
consta un puntero no-const sin cast:int *q = p1;genera advertencia del compilador porque se perdería la protecciónconst. - Intentar modificar el valor a través de un
const int *usando un cast para eliminarconst: es comportamiento indefinido si el objeto original fue declaradoconst. - No inicializar un
int * consten la declaración: un puntero constante debe inicializarse donde se declara (no puede reasignarse después).
Aplicación práctica
const int * se usa en parámetros de funciones para garantizar que no se modifique el dato original (strcmp, strlen, printf usan const char *). int * const aparece en registros de hardware embebido donde la dirección es fija pero el valor es de escritura. const int * const expresa un puntero completamente inmutable, útil para tablas de configuración de solo lectura.
Siguiente ejercicio recomendado
- Buffer dinámico en C: ejercicio resuelto
- Puntero a struct en C: ejercicio resuelto
- Arrays como parámetros en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Por qué el compilador avisa si asigno const int * a int *?
Porque al perder el const se abre la posibilidad de modificar datos que el programador marcó como inmutables. El compilador genera una advertencia (o error en modo estricto) para señalar que se está eliminando protección de forma implícita.
¿Qué significa const en el parámetro const char *s de printf?
Significa que printf se compromete a no modificar la cadena apuntada por s. Es una garantía al llamador: puedes pasar una cadena literal (que vive en memoria de solo lectura) sin riesgo de que printf la modifique.
¿Cómo se lee const int * const *pp?
De derecha a izquierda: pp es un puntero (*pp) no constante, que apunta a un puntero constante (* const) a un entero constante (const int). En la práctica, el doble nivel es raro, pero aparece en tablas de punteros a strings de solo lectura como const char * const argv[].