Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178

    [C] Accedere a elementi di struct annidate

    Buonasera,
    ho 3 struct che contengono una serie di dati e un puntatore.
    Quindi, esemplificando:

    struct1
    dati

    struct2
    dati
    puntatore a struct1

    struct3
    dati
    puntatore a struct2

    Ora, io ho un elemento di struct3 e devo accedere ad un dato della struct1.
    Come ci arrivo?
    Spero di essere stato chiaro..
    Grazie mille
    Buji

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,239

    Re: [C] Accedere a elementi di struct annidate

    struct3.puntatore a struct2->puntatore a struct1->dati

    oppure

    puntatore a struct3->puntatore a struct2->puntatore a struct1->dati

  3. #3
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178
    Grazie,
    avevo già provato la seconda soluzione che mi hai proposto ma arrivato al secondo puntatore mi dice che non fa parte della struct (forse sbaglio operatori)..
    Buji

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,239
    Mostra le dichiarazioni effettive delle strutture ... insomma mostra il codice ...

  5. #5
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178
    codice:
    typedef struct _v {
       int codice;
    } volo;
    
    struct albero {
       volo *anodo;
       struct albero *right, *left;
    };
    typedef struct albero *nodo_albero;
    
    struct lista {
       nodo_albero *ptr_nodo;
       struct lista *next;
    };
    typedef struct lista *lista_elem;
    Da un lista_elem devo accedere a un codice volo..
    Grazie
    Buji

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,239
    Se hai

    lista_elem r;

    allora accedi con

    r->ptr_nodo->anodo->codice;

    ma devi correggere la struct lista in questo modo

    struct lista {
    nodo_albero ptr_nodo;
    struct lista *next;
    };

    perche' nodo_albero e' gia' un tipo puntatore

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    Originariamente inviato da oregon

    ma devi correggere la struct lista in questo modo

    struct lista {
    nodo_albero ptr_nodo;
    struct lista *next;
    };

    perche' nodo_albero e' gia' un tipo puntatore
    infatti, i typedef sono tanto comodi quanto fuorvianti, se non si presta attenzione è facile incappare in errori di questo tipo. anche a me capitano in continuazione disattenzioni di questo genere dettate dalla fretta...

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,591
    Originariamente inviato da ilmo lesto
    infatti, i typedef sono tanto comodi quanto fuorvianti, se non si presta attenzione è facile incappare in errori di questo tipo. anche a me capitano in continuazione disattenzioni di questo genere dettate dalla fretta...

    Sono fuorvianti se non vengono usati nel modo giusto.
    Basta mettere il prefisso LP e non ci si imbroglia mai
    codice:
     LPINT a; //int *a
             LPALBERO b; //albero* b;
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,239
    Originariamente inviato da XWolverineX
    Sono fuorvianti se non vengono usati nel modo giusto.
    In effetti, suggerirei questo codice

    codice:
    typedef struct _volo {
       int codice;
    } *PVOLO;
    
    typedef struct _nodo_albero {
       PVOLO pnodo;
       struct _nodo_albero *pleft;
       struct _nodo_albero *pright;
    } *PNODO_ALBERO;
    
    typedef struct _lista {
       PNODO_ALBERO pnodoalbero;
       struct _lista *pnext;
    } *PLISTA;
    e nel main

    codice:
    	PLISTA p;
    
    	//...
    
    	p->pnodoalbero->pnodo->codice;

  10. #10
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178
    Grazie mille!!
    Sicuramente avrò ancora bisogno del vostro aiuto.
    Buji

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 © 2019 vBulletin Solutions, Inc. All rights reserved.