Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Principiante. punteros dentro de estructuras

Estas en el tema de Principiante. punteros dentro de estructuras en el foro de C/C++ en Foros del Web. Hola de nuevo! No entiendo muy bien el uso de los punteros en este ejercicio. (adjunto las funciones que emplean punteros y señalo en rojo ...
  #1 (permalink)  
Antiguo 04/12/2008, 00:30
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 0
Principiante. punteros dentro de estructuras

Hola de nuevo!

No entiendo muy bien el uso de los punteros en este ejercicio. (adjunto las funciones que emplean punteros y señalo en rojo mis dudas). Se trata de añadir elementos a una lista de pedidos.

struct pet
{
int numpedido;
pet *next;
} a;

a *b=NULL;
int contador;

//////
void print (){
a* r;
r=b;
while (r!=NULL){
printf("<%d>", r-> numpedido);
r=r->next}
}

//////
void add(){
int c;
a* r;
r=(a*) malloc (sizeof(a));
c=contador++;
r->numpedido=c;
r->next=a;
a=r;
}

/////
void remove(){
a *r;
r=b;
r=b->next;

free(r);
}


Estas funciones están pensadas para ser utilizadas por diferentes hebras (he obviado los mutex). Es por esta razón que no se emplea directamente la estructura pet a? ¿por qué no se usa tampoco el puntero a una estructura "b" sino que utilizo el puntero a una estructura "r"?
¿Por qué define el puntero a estructura "r" en las tres funciones y sin embargo sólo le da un lugar en la memoria (malloc) en la función add()?
  #2 (permalink)  
Antiguo 05/12/2008, 15:57
 
Fecha de Ingreso: febrero-2006
Mensajes: 49
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: Principiante. punteros dentro de estructuras

Buenasss

Si, definitivamente la codificación intenta simular una lista enlazada de elementos, donde la key de cada uno de ellos en este caso es un entero.

Una pregunta te hago al pasar, esto compila y ejecuta bien??

Vamos con tus dudas. En print r = r->next lo que significa es que esta pasando al siguiente elemento de la lista, simplemente eso. utiliza r en lugra de b ya que b es global y lo usan todas las funciones, usando una variable local como copia no pierde el valor original de b ya que se necesitará despues.

El malloc se hace solo en add porque en la funcion add quiero añadir un nuevo bloque a la lista, entonces debo reservarle memoria. El puntero r se usa para iterar en la lista cosa que se necesita en los 3.

Despues donde marcaste en rojo creo que hay algunos errores, te tiro mi idea, a ver si funciona...

Código HTML:
//////
void add(){
int c;
a* r;
r=(a*) malloc (sizeof(a));
c=contador++;
r->numpedido=c;
r->next = b;
b = r;             // Agrego el elemento al inicio
}

/////
void remove(){
a *r;
r=b;
b=b->next;      // b pasa al siguiente
free(r);
}
Se entienden los cambios??

Cualquier cosa preguntame
Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:11.