[Muy específico] Algo de punteros

Iniciado por GGZ, 2 Noviembre 2016, 13:27 PM

0 Miembros y 1 Visitante están viendo este tema.

GGZ

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!
LET'S DO STUFF!!