Thread original: sisoputnfrba/foro#2224 (comment)
Veamos el siguiente ejemplo:
int a = 0;
a = 1;En este caso, yo estoy declarando una variable en 0 y luego "piso" ese valor a 1.
Entonces, tengamos las siguientes consideraciones:
- Un puntero es básicamente un número entero como cualquier otro, solo que tiene la particularidad de que indica una dirección en memoria (normalmente lo representamos en hexa xq es más cómodo:
0x1234,0x4567, etc). malloc()reserva memoria en el heap (a.k.a memoria dinámica) y devuelve un puntero hacia el primer byte en donde empieza, o sea, no es que devuelve el cacho de memoria que reservó, sino que devuelve solo un número entero que indica en dónde ir a buscarlo.list_find()también devuelve un puntero, en este caso, hacia el primer byte del structt_tripulante_a_planificarque esté guardado en la lista y cumpla con la condición que recibe por parámetro (si no lo encuentra, devuelveNULL, o sea,0x0).
Entonces, volviendo al ejemplo, si asumimos que malloc() devuelve 0x1234 y list_find() devuelve 0x4567, estarías haciendo lo siguiente:
t_tripulante_a_planificar* tripulante_buscado = 0x1234;
// ...
tripulante_buscado = 0x4567;Que sería lo mismo que vimos arriba con el int.
Entonces, (por más que no sea el caso) si quisieras "rellenar" lo que está en 0x4567 dentro de 0x1234 como mencionaba Nico, lo adecuado sería hacer un memcpy:
t_tripulante_a_planificar* tripulante_buscado = malloc(...); // devuelve 0x1234
// ...
t_tripulante_a_planificar* tripulante_en_lista = list_find(...); // devuelve 0x4567
memcpy(tripulante_buscado, tripulante_en_lista, sizeof(t_tripulante_a_planificar));
// sería hacer memcpy(0x1234, 0x4567, sizeof(t_tripulante_a_planificar));
// o sea, rellenar dentro de 0x1234 una copia de lo que está en 0x4567
return tripulante_buscado; // retornamos la copia