elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Muy específico] Algo de punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Muy específico] Algo de punteros  (Leído 1,223 veces)
GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
[Muy específico] Algo de punteros
« en: 2 Noviembre 2016, 13:27 pm »

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:

Código
  1. typedef struct _AStack {
  2. int data[MAX_STACK];
  3. int back;
  4. }AStack;
  5.  

Acá va la duda:


Código
  1. void astack_reverse (AStack *s){
  2. int i;
  3. AStack *reverse = astack_create();
  4.  
  5. for (i=s->back; i >=0; i--){
  6. astack_push(reverse,s->data[i]);
  7. }
  8. *s = *reverse;
  9. }

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:

Código
  1. typedef struct _AStack {
  2.        int *data;
  3.        int size;
  4.        int back;
  5. }AStack;


Código
  1. void astack_push(AStack *s, int v){
  2.  
  3.        if (s != NULL){
  4.                if (s->size > s->back){
  5.                        s->back++;
  6.                        s->data[s->back] = v;
  7.                }else{
  8.                        s->size*=2;
  9.                        int *new_data = realloc(s->data,(s->size));
  10.                        if (new_data != NULL) s->data = new_data;
  11.                        else printf ("No se pudo asignar memoria.\n");
  12.                }
  13.        }
  14. }


Me refiero a esta parte:

Código:
                       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!


« Última modificación: 2 Noviembre 2016, 13:43 pm por GGZ » En línea

LET'S DO STUFF!!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como convertir algo en algo o crear algo xD
Electrónica
ATI-Radeon 2 3,918 Último mensaje 17 Diciembre 2006, 02:38 am
por davinci21
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 4,860 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Punteros dobles / Punteros a puntero.
Programación C/C++
NOB2014 5 7,873 Último mensaje 13 Abril 2016, 16:00 pm
por MAFUS
(Consulta) Punteros a punteros en C
Programación C/C++
class_OpenGL 1 1,781 Último mensaje 19 Julio 2016, 14:29 pm
por class_OpenGL
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines