Creo que ya sé la respuesta, pero por si las dudas pregunto.
Básicamente tengo que invertir una pila, una estructura de datos que la represento como:
typedef struct _AStack {
int data[MAX_STACK];
int back;
}AStack;
Acá va la duda:
void astack_reverse (AStack *s){
int i;
AStack *reverse = astack_create();
for (i=s->back; i >=0; i--){
astack_push(reverse,s->data[i]);
}
*s = *reverse;
}
La duda está en la última linea *s=*reverse, lo que estoy haciendo es igualar todos los elementos de s a reverse, (ya sé que no es lo más eficiente).
Ahora si yo hago s = reverse (sin *) lo que pasa es que yo estoy modificando una variable global (estoy modificando la dirección donde apunta) y cuando vuelve al main perdí la información. Eso si entiendo ...
¿Pero por qué acá no pasa lo mismo?
Acá estoy implementando pilas pero con otra estructura:
typedef struct _AStack {
int *data;
int size;
int back;
}AStack;
void astack_push(AStack *s, int v){
if (s != NULL){
if (s->size > s->back){
s->back++;
s->data[s->back] = v;
}else{
s->size*=2;
int *new_data = realloc(s->data,(s->size));
if (new_data != NULL) s->data = new_data;
else printf ("No se pudo asignar memoria.\n");
}
}
}
Me refiero a esta parte:
int *new_data = realloc(s->data,(s->size));
if (new_data != NULL) s->data = new_data;
else printf ("No se pudo asignar memoria.\n");
... s->data = new_data;
Siendo que new_data la declaré dentro de la función y s->data también me lo pasaron, ¿es por como funciona el realloc?, estoy casi seguro que sí.
Se me hizo medio largo.
Saludos!