Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    C e' strutture dati dinamiche... ???

    Salve amici,
    ho un problema nel capire la sintassi della dichiarazione della struttura:


    codice:
    typedef struct Lista{
      int valore;
      double tab[A];
      char stringa[];
      struct Lista *coda;
    } Lista;
    Le due parti in grassetto non le capisco!!!
    1) perche il nome lista viene messo anche all'inizio dopo lo struct? cosa cambia rispetto alla fine?

    2) e lo struct Lista *cosa, cosa crea? Una struttua puntatore a lista?


    bye bye


    e grazeeeeeeeeeeeeeeeeee

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    271
    dopo numerose consultazioni, risulterebbe che se tolgo il 'LISTA' dopo struct (nella dichiarazione della struttura), la successiva dichiarazione del campo interno alla struttura (struct Lista *coda; che crea un puntatore ad una struttura di tipo Lista) non saprebbe a che tipo fare riferimento. Per verificare, prova a togliere il 'Lista' iniziale, dovrebbe dirti che non riconosce ilo tipo del campo interno.

  3. #3
    > Le due parti in grassetto non le capisco!!!

    coda è un puntatore a un elemento di tipo struct Lista.

    > 1) perche il nome lista viene messo anche all'inizio dopo lo
    > struct? cosa cambia rispetto alla fine?

    all'inizio stai dichiarando il tipo. Alla fine stai allocando staticamente dello spazio in memoria sotto l'identificatore Lista.

    Dopo questa dichiarazione/definizione hai che Lista è un elemento di tipo struct Lista.

    > 2) e lo struct Lista *cosa, cosa crea? Una struttua puntatore a
    > lista?

    questa domanda è alquanto misteriosa...

    Claudibus

  4. #4
    Utente di HTML.it L'avatar di wolf64
    Registrato dal
    Jul 2001
    Messaggi
    521
    Oltre ai pareri che ti hanno già dato Claudibus e Pasaran ti do anche il mio, allora, con typedef tu crei una definizione "Lista" al tipo di variabile struttura "Lista" , io, per abitudine, di solito non uso l'iniziale maiuscola nel tipo di variabile struttura e la uso nella definizione, cioè, per farti un esempio pratico:

    codice:
    typedef struct lista {
           int valore;
           char stringa;
           struct lista *punta_lista;
    } Lista;
    Vedi la differenza nelle maiuscole rispetto alla tua struttura?
    Questo ti permette ti fare una distinzione tra la definizione ed il nome della struttura.
    Il significato di "struct lista *punta_lista;" te lo hanno già detto, nella pratica, ad esempio, potrebbe servirti nel caso volessi creare una lista lineare dove "struct lista *punta_lista;" è il puntatore da cui crei l'elemento successivo.
    In effetti se il primo elemento della lista lo crei con questo frammento di codice:

    codice:
    Lista *puntatore_iniziale, *puntatore_scorre_lista;
    
    puntatore_iniziale = (Lista *)malloc(sizeof(Lista));
    ....passi l'indirizzo contenuto in puntatore iniziale all'altro puntatore che creerà gli elementi successivi:

    codice:
    puntatore_scorre_lista = puntatore_iniziale;
    ....in modo da mantenere l'indirizzo di inizio lista, poi gli elementi seguenti li crei in quest'altro modo:

    codice:
    
    
    puntatore_scorre_lista->punta_lista = (Lista)malloc(sizeof(Lista));
    ....poi ti sposti nell'elemento appena creato:

    codice:
    puntatore_scorre_lista = puntatore_scorre_lista->punta_lista;
    Per finire, come avrai notato con "typedef" ho evitato di definire il tipo della struttura ripetendo "struct lista" ma solo "Lista", però per creare il puntatore a se stessa all'interno della struttura ho "dovuto" usare "struct lista *punta_lista;" in quanto se avessi usato "Lista *punta_lista;" il compilatore mi avrebbe restituito un messaggio di errore.
    Se non avessi avuto l'esigenza di creare una variabile struttura dello stesso tipo di se stessa all'interno avresti potuto omettere il termine "lista" in questo modo:


    codice:
    typedef struct  {
           int valore;
           char stringa;
    } Lista;
    Questi principi ti sono molto utili anche nella creazione di strutture dati più complesse delle liste lineari quali, ad esempio, alberi e grafi.
    Sò che questi argomenti non sono di certo facili nel C, però spero che questa mia risposta ti abbia chiarito un po più le idee .

    Ciao
    Gigi
    Powered by Slack Current - Kernel 2.6.22
    Slackware Evangelist
    My LUG (Linux User Group): LinuxVar (LUG di Varese)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.