Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/03/2010, 08:45
nosek159
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 7 meses
Puntos: 2
proplema con paso de punteros de structuras a funciones

Hola a todos, estoy intentando hacer un programa q realice las siguientes tareas.
Mantener una lista de personas, poder introducir, modificar o borrar personas y guardarlas en un archivo binario.
El problema q tengo es q me declaro un puntero q apunta a la primera persona de la lista y otro a la ultima y cuando paso este puntero a la funcion tiene un valor distinto al q esta en el main y no entiendo muy bien xk. El archivo main es el siguiente (resumiendo un poco):
Código:
#include <stdio.h>
#include <stdlib.h>
struct personas {
    char *nombre;
    int edad;
    struct personas *siguiente;
};


int main(int argc, char** argv) {

    int opcion=10;
    // declaro los punteros de tipo personas q aun no apuntan a ningun sitio
    struct personas *primera;
    struct personas *ultima;
    int nPersonas=0;

        scanf("%d",&opcion);
        fflush(stdin);

        switch(opcion){
            case 3: {
                primera=insertar(primera, ultima, &nPersonas);
                break;
            }
            case 4: {
                mostrar(primera, &nPersonas);
                break;
            }
            case 0: {
                puts("Hasta la proxima");
                break;
            }
            default: {
                puts("No es una opcion valida");
            }
        }
     }


    return (EXIT_SUCCESS);
}

este es el archivo de las funciones:

Código:
struct personas {
    char *nombre;
    int edad;
    struct personas *siguiente;
};
// le paso el apuntador a la primera persona, a la ultima y el numero de personas
void insertar(struct personas *primera, struct personas *ultima, int *nPersonas){

    char *nombre;
    int edad=0;
    struct personas *persona;

// asignamos el espacio de memoria al apuntador persona de tipo personas
    if ((persona=malloc(sizeof(struct personas)))==NULL){
        puts("Error al asignar la memoria");
    } else {
// pedimos los datos y los guardamos en la estructura
        puts("Dime el nombre de la persona: ");
        gets(&nombre);
        fflush(stdin);
        puts("Dime la edad: ");
        scanf("%d",&edad);
        fflush(stdin);
        strcpy(persona->nombre,&nombre);
        persona->edad=edad;
        persona->siguiente=NULL;
        if ((*nPersonas)==0){
// si es la primera persona q insertamos el puntero primera y ultima apuntan a esta persona
            ultima=persona;
            primera=persona;
        } else {
// si ya tenemos mas personas la ultima apuntara a esta y esta sera la ultima
            ultima->siguiente=persona;
        }
        (*nPersonas)++;
        puts("Insercion correcta");
    }

}

void mostrar(struct personas *primera, int *nPersonas){

    struct personas *perActual=primera;
    int cont=0;
    for (cont=0;cont<(*nPersonas);cont++){
        printf("Nombre: %s\nEdad: %d\n",perActual->nombre,perActual->edad);
        if (perActual->siguiente!=NULL){
            perActual=perActual->siguiente;
        }
    }

}
como veis dentro de la funcion insertar cambio el valor de primera y ultima pero cuando sale de la funcion, en el main, estos dos punteros siguen teniendo el mismo valor q antes.
Que estoy haciendo mal?

Gracias,
Dani.