Cada vez que usamos el calificador const con el nombre de la variable, se convierte en una variable de solo lectura y se almacena en el segmento .rodata. Cualquier intento de modificar esta variable de solo lectura dará como resultado un error de compilación: «asignación de variable de solo lectura».
En el siguiente programa, se intenta modificar una variable de solo lectura declarada usando el calificador const:
#include<stdio.h> int main() { const int var = 10; var = 15; printf("var = %d\n", var); return 0; }
Salida :
prog.c: In function 'main': prog.c:5:9: error: assignment of read-only variable 'var'
Cambiar el valor de una variable const a través del puntero
Las variables declaradas usando la palabra clave const, se almacenan en el segmento .rodata, pero aún podemos acceder a la variable a través del puntero y cambiar el valor de esa variable. Al asignar la dirección de la variable a un puntero no constante, estamos convirtiendo una variable constante en un puntero no constante. El compilador dará una advertencia al encasillar y descartará el calificador const. La optimización del compilador es diferente para variables y punteros. Es por eso que podemos cambiar el valor de una variable constante a través de un puntero no constante.
El siguiente programa ilustra esto:
//Write C code here #include<stdio.h> #include<stdlib.h> int main() { const int var = 10; int *ptr = &var; *ptr = 12; printf("var = %d\n", var); return 0; }
Salida :
prog.c: In function 'main': prog.c:6:16: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] int *ptr = &var; var = 12
Nota : si intentamos cambiar el valor a través del puntero constante, obtendremos un error porque estamos tratando de cambiar el segmento de solo lectura.
Publicación traducida automáticamente
Artículo escrito por sheenam Bala y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA