En resumen son variables que contienen la dirección de memoria de otra variable, es decir que hacen referencia a la localidad de memoria de la otra variable. Esto nos asegura acceder con rapidez a la información almacenada.
Por ejemplo:
address = 0, 1, 2, 3, 4, 5
variable = a, b, c, d, e, f
value = ?, ?, 4, 9, ?, 5 Vemos que la variable "d" esta en la dirección de memoria 3 y que su valor es de "9".
para acceder de una forma muy rapida a su valor solo hay que crear un apuntador hacia esa dirección de memoria.
int d = 9;
int *p = &d
printf("Address of 'd': %p\n", &d);
result: Addres of 'd': 3
printf("Value of 'p': %p\n", p);
result: Value of 'p': 9esto indicaría que "*p" esta apuntando hacia la dirección de memoria de la variable "d" por ende ya puede acceder a su valor de una manera mas rápida.
si queremos acceder a una posicion de memoria (X) para cambiar su valor seria algo como:
struct point {
int x;
int y;
};
struct point my_point = { 3, 7 };
struct point *p = &my_point;
printf("%p", p);
result: {3, 4}
p->x = 5;
p->y = 6;
printf("%p", p);
result: {5, 6}
O tambien se puede asignar un nuevo valor de esta manera (*p).y = 5