¿Por qué no puedo imprimir el valor de un puntero en C utilizando printf?
Tengo una pregunta simple. Soy nuevo en punteros en C y no entiendo por qué esto funciona y puedo cambiar el valor del puntero.
Pero esto no imprime ningún número.
¡Gracias por la ayuda!
davy.ai
En el primer fragmento de código, la variable
aptr
se le asigna la dirección de memoria de la variablex
. La línea*aptr = 21
significa que el valor de la ubicación de memoria apuntada poraptr
(que esx
) se cambiará a 21. Esto se debe a que*aptr
es un operador de desreferenciación de puntero, lo que significa que accede al valor almacenado en la ubicación de memoria a la queaptr
apunta. Por lo tanto, cuando se ejecuta*aptr = 21
, se cambia el valor dex
a 21, que luego se imprime en la segunda instrucciónprintf
.En el segundo fragmento de código, la variable
aptr
se le asigna el valor entero 21, que no es una dirección de memoria válida. Por lo tanto, cuando se usa*aptr
en la instrucciónprintf
, intenta acceder a una ubicación de memoria a la que el programa no tiene acceso, lo que resulta en un comportamiento indefinido. Es por eso que no se imprime nada.Para corregir el segundo fragmento de código, debe asignar una dirección de memoria válida a
aptr
. Por ejemplo, puede asignarle la dirección de una variable entera, de esta manera:Esto imprimirá el valor de
x
(que es 7) porqueaptr
ahora apunta a una ubicación de memoria válida.