Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/07/2011, 16:24
Checho360
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 1 mes
Puntos: 3
Duda con punteros

Hola, estoy haciendo unos programas relacionados con estructuras, en este caso concreto estoy mirando los arboles binarios de búsqueda. Hay una cosa que no sé por qué pasa.

Tomo la siguiente estructura:

Código C:
Ver original
  1. typedef struct arbol_binario{
  2.    
  3.     int nodo; //valor del nodo padre
  4.    
  5.     struct arbol_binario *ptrIzq; //puntero al nodo izquierdo
  6.    
  7.     struct arbol_binario *ptrDrcho; //puntero al nodo derecho
  8.    
  9. } nuevoArbol, *ptrNuevoArbol;

Para añadir un nuevo elemento, lo hago con malloc.

Veamos, una vez que tengo un arbol binario construido, si quiero modificar un elemento, por ejemplo el hijo derecho de *arbol podría hacer:

Código C:
Ver original
  1. ptrNuevoArbol ptrDir = &(arbol->ptrDrcho);
  2.  
  3. (*ptrDir) = *arbol2;

y ya donde estaba arbol ahora esta arbol2.

Veamos, lo que no entiendo muy bien es que dirección de memoria hay en arbol, cuando *arbol es el puntero que devuelve malloc al bloque de memoria. Qué hay en expresiones del tipo (&(arbol->ptrDrcho)), osea, donde las declaro y eso. Y además, si esas expresiones son punteros a los punteros a los bloques de memoria, por qué al modificar los bloques a los que apuntan se modifica el arbol? yo creía que ptrDrcho y ptrIzq apuntaban los propios bloques de memoria, con lo cual para eliminar un nodo tendría que hacer apuntar a estos a otro bloque de memoria, pero si cojo y cambio el puntero a dicho bloque a otro bloque diferente, ya se cambia.

No sé si se me entenderá algo, me temo que poco... jej

Un slaudo!