Hola!! Para entenderlo bien, lo suyo es que comprendas cómo funciona un puntero.
Básicamente, cuando tienes un puntero que apunta a una estructura, estás guardando datos en dos sitios: por una parte, el puntero es una dirección de memoria, que se guardará en el Heap; por otro, la estructura estará almacenada en la posición de memoria, en el Stack. Cuando igualas punteros, sólo estás haciendo que ambas variables apunten a la misma posición de memoria. En este caso tenemos tres zonas de memoria: el puntero inicial y el segundo, que se encontrarán en el Heap, y la propia estructura, que estará en el Stack. Cuando utilizas memcpy, lo que estás haciendo es realizar una copia de la posición de memoria (el Stack) en otro sitio(también en el Stack). Ten cuidado, porque memcpy no reservará esa memoria. Si comprendes la diferencia entre el Heap y el Stack, todo es más sencillo. Cuando haces: - int i; - void* pointer; etc, estás reservando memoria en el Heap. Ésta es volátil y la suele gestionar el propio compilador. Cuando utilizas las funciones *alloc (Malloc, Alloc, Calloc, Strdup, ...) estás usando el Stack, y eres tú el encargado de gestionar su liberación. Por eso, cuando usas: "*p = *j", estás utilizando sólo el Heap. Cuando usas "strcpy", estás leyendo y escribiendo en el Stack. Pintándolo: http://video.google.com/videoplay?docid=-3462836456663764635&q=Pointer+C Diferencias entre el Heap y el Stack: http://wiki.answers.com/Q/What_is_difference_between_heap_memory_and_stack_memory Espero haberme explicado. Un saludo!! El 22 de abril de 2012 17:43, Dani <[email protected]> escribió: > ¡Buenas a todos! > > Pues simplemente quería preguntaros cual es la diferencia entre las > siguientes sentencias, siendo variables definidas por una estructura g, en > C: > > *p=*j; > memcpy(p, j , sizeof(struct q)); > > Espero que alguien me pueda sacar de la duda. > Gracias. > > _______________________________________________ > CRySoL mailing list > http://crysol.org/ > https://arco.esi.uclm.es/cgi-bin/mailman/listinfo/crysol > > -- Miguel Ángel García Martínez http://www.magmax.org Mail <[email protected]> | Twitter <http://twitter.com/#magmax9> | LinkedIn <http://www.linkedin.com/in/miguelangelgarciamartinez> | about.me <http://about.me/miguelangelgarcia>
_______________________________________________ CRySoL mailing list http://crysol.org/ https://arco.esi.uclm.es/cgi-bin/mailman/listinfo/crysol
