Struct in una struct

di il
20 risposte

Struct in una struct

Ragazzi scusate avrei bisogno di aiuto con una cosa :
struct lista{
int x;
struct lista *next;
};


struct prova{
int x;
struct lista *speriamo;

int main()
{
  int i=0;
  struct prova *top=NULL;
  top=(struct prova *)malloc(sizeof(struct prova));
  for(i=0;i<5;i++){
    top->speriamo=(struct lista *)malloc(sizeof(struct lista));
    top->speriamo->x=0;
    top=top->speriamo->next;
  }
    return 0;
}

};
in pratica cosa sto cercando di fare ho una struct dove all'interno c'è un'altra struct che è una lista.Ma non so come lavorarci.Nel codice ho provato ad allocare memoria ma purtroppo dà problemi mi sapereste aiutare?

20 Risposte

  • Re: Struct in una struct

    Ciao,
    ho buttato giù (piuttosto in fretta) un piccolo esempio. Prova a vedere se può esserti utile.
    
    #include <stdio.h>
    #include <stdlib.h>
    
    /* definizione della lista */
    typedef struct _lista
    {
        int x;
        struct _lista * next;
    } lista;
    
    /* definizione dell'altra struttura */
    struct prova
    {
        int x;
        lista * speriamo;
    };
    
    /* funzione che aggiunge un elemento in coda alla lista */
    lista * aggiungi(lista * list, int val)
    {
        lista * item = (lista *) malloc(sizeof(lista));
        item->x = val;
        item->next = NULL;
        if(list == NULL) return item;
        lista * tmp = list;
        while(tmp->next != NULL) tmp = tmp->next;
        tmp->next = item;
        return list;
    }
    
    /* funzione che stampa la lista */
    void stampaLista(lista * list)
    {
        lista * tmp = list;
        while(tmp != NULL)
        {
            printf("%d  -  ", tmp->x);
            tmp = tmp->next;
        }
        printf("\n");
    }
    
    int main()
    {
        lista * mylist = NULL;
        mylist = aggiungi(mylist, 4);
        mylist = aggiungi(mylist, 5);
        stampaLista(mylist);
    
        struct prova * myprova = (struct prova *) malloc(sizeof(struct prova));
    
        myprova->x = 1;
        myprova->speriamo = mylist;     /* inserisco la lista "dentro" all'altra struttura... */
    
        stampaLista(myprova->speriamo); /* ... e la ristampo: mi aspetto lo stesso output di prima */
    
        return 0;
    }
    
  • Re: Struct in una struct

    Sei un genio grazie!!!!
  • Re: Struct in una struct

    Ho un altra domanda ora ho una struttura di questo tipo:
    
    struct iniziale{
    int x;
    struct strada *stradat[10]
    }
    
    struct strada{
    int x;
    struct strada *next;
    }
    
    ho creato una struttura di tipo iniziale e sto provando ad allocare memoria per stradat ecco i passaggi
    
    struct iniziale *istante=NULL;
    istante=(struct iniziale *)malloc(sizeof(struct iniziale))
    istante->stradat=(struct strada *)malloc(sizeof(struct strada *)*10)
    }
    
    l'errore sta nell allocare memoria per l'array di struct mi dice incomatible types in assignament
  • Re: Struct in una struct

    struct strada *stradat[10]
    è un doppio puntatore che tu stai cercando di convertire in puntatore singolo
    istante->stradat=(struct strada *)malloc(sizeof(struct strada *)*10)
    se con
    istante->stradat=(struct strada **)malloc(sizeof(struct strada *)*10)
    e
    struct iniziale{
    int x;
    struct strada **stradat
    }
    si risolve era questo il problema
  • Re: Struct in una struct

    Altrimenti metti tutto il nuovo codice
  • Re: Struct in una struct

    Ho provato il codice e ora funzione devo provare ad mettere elementi all'interno ora.
    Comunque grazie sei stato chiarissimo
  • Re: Struct in una struct

    Ho provato con un ciclo for per inserire dati all'interno arriva fino alla 3 indice dell'array poi si blocca
    iniziale->stradat=(struct strada **)malloc(sizeof(struct strada *)*6);
         //creare la strada 
         for(i=0;i<5;i++){
         printf("inserisci il nome della %d strada",i+1);
         scanf("%d",&iniziale->stradat[i]->nome);
         }
         }
  • Re: Struct in una struct

    Posta il codice di adesso

    ok
  • Re: Struct in una struct

    Con
    istante->stradat=(struct strada **)malloc(sizeof(struct strada *)*10)
    alochi 10 puntatori a struct strada (ma non lo spazio per le strutture reali)

    con
    (struct strada *)malloc(sizeof(struct strada )*10)
    allochi 10 struct strada (ma sullo stesso puntatore)


    Tu esattamente cosa vuoi fare?
  • Re: Struct in una struct

    Io ho bisogno di allocare spazio per una struct che contiene una sottostruct che è un array nel quale ogni cella contiene una lista
    spero di essere stato chiaro
  • Re: Struct in una struct

    #include <stdio.h>
    #include <stdlib.h>
    
    struct iniziale
    {
        int x;
        struct strada *stradat;
    };
    
    struct strada
    {
        int x;
        struct strada *next;
    };
    
    int main()
    {
        int i;
    
        struct iniziale *istante=NULL;
        istante=(struct iniziale *)malloc(sizeof(struct iniziale));
        istante->stradat=(struct strada *)malloc(sizeof(struct strada )*10);
    
        for(i=0; i<5; i++)
        {
            printf("inserisci il nome della %d strada",i+1);
            scanf("%d",&istante->stradat[i].x);
        }
    
        return 0;
    }
    
    Io ho interpretato così...
  • Re: Struct in una struct

    Non funziona
  • Re: Struct in una struct

    Qual è il problema?
  • Re: Struct in una struct

    antonx ha scritto:


    non funziona
    Una spiegazione che fa capire tutto ... complimenti ...
Devi accedere o registrarti per scrivere nel forum
20 risposte