C Punteros
Creando punteros
Aprendiste en el capítulo anterior que podemos obtener la dirección de memoria de una variable con el operador de referencia &
:
Ejemplo
int myAge = 43; // una variable entera
printf("%d", myAge); // Genera el valor de myAge (43)
printf("%p", &myAge); // Genera la dirección de memoria de myAge (0x7ffe5367e044)
Inténtalo tú mismo »
Un puntero es una variable que almacena la dirección de memoria de otra variable como su valor.
Una variable de puntero apunta a un tipo de datos (como int
) del mismo tipo y se crea con el operador *
.
La dirección de la variable con la que estás trabajando se asigna al puntero:
Ejemplo
int myAge = 43; // Una variable entera
int* ptr = &myAge; // Una variable de puntero, con el nombre ptr, que almacena la dirección de myAge
// Genera el valor de myAge (43)
printf("%d\n", myAge);
// Genera la dirección de memoria de myAge (0x7ffe5367e044)
printf("%p\n", &myAge);
// Genere la dirección de memoria de myAge con el puntero (0x7ffe5367e044)
printf("%p\n", ptr);
Inténtalo tú mismo »
Ejemplo explicado
Cree una variable de puntero con el nombre ptr
, que apunte a un int
variable (myAge
). Tenga en cuenta que el tipo de puntero debe coincidir con el tipo de variable con la que está trabajando (int
en nuestro ejemplo).
Utilice el operador &
para almacenar la dirección de memoria de la variable myAge
y asígnela a la puntero.
Ahora, ptr
contiene el valor de la dirección de memoria de myAge
.
Desreferencia
En el ejemplo anterior, usamos la variable de puntero para obtener la dirección de memoria de una variable (usada junto con el operador &
reference ).
También puede obtener el valor de la variable a la que apunta el puntero utilizando el operador *
(el operador desreferencia):
Ejemplo
int myAge = 43; // Declaración de variables
int* ptr = &myAge; // Declaración de puntero
// Referencia: genera la dirección de memoria de myAge con el puntero (0x7ffe5367e044)
printf("%p\n", ptr);
// Desreferencia: genera el valor de myAge con el puntero (43)
printf("%d\n", *ptr);
Inténtalo tú mismo »
Tenga en cuenta que el signo *
puede resultar confuso aquí, ya que hace dos cosas diferentes en nuestro código:
- Cuando se usa en la declaración (
int* ptr
), crea una variable de puntero. - Cuando no se utiliza en la declaración, actúa como un operador de desreferencia.
Es bueno saberlo: Hay dos formas de declarar variables de puntero en C:
int* myNum;
int *myNum;
Notas sobre sugerencias
Los punteros son una de las cosas que hacen que C se destaque de otros lenguajes de programación, como Python y Java.
Son importantes en C, porque nos permiten manipular los datos en la memoria de la computadora. Esto puede reducir el código y mejorar el rendimiento. Si está familiarizado con estructuras de datos como listas, árboles y gráficos, debe saber que los punteros son especialmente útiles para implementarlos. Y a veces incluso tienes que usar punteros, por ejemplo, cuando trabajas con archivos.
Pero ten cuidado; Los punteros deben manejarse con cuidado, ya que es posible dañar los datos almacenados en otras direcciones de memoria.