ACCEDERE AI CAMPI DI UNA STRUCT

di il
6 risposte

ACCEDERE AI CAMPI DI UNA STRUCT

Ciao a tutti...avevo un dubbio:
typedef struct _persona{

  char *nome;

  int età;

} persona;


persona *a;

a->nome=....

a.nome=....
supponendo di avere una struct come quella scritta sopra...in che cosa differiscono le due scritture per accedere al campo nome della struct persona??

alcune volte quando compilo un programma se uso l'accesso mediante "freccia" (->) mi da errore, e cambiandolo con il punto si risolve.

non capisco da cosa dipenda.

Grazie per i chiarimenti!

6 Risposte

  • Re: ACCEDERE AI CAMPI DI UNA STRUCT

    L'operatore freccia (->) lo usi con un puntatore a una struct. Invece l'operatore punto lo usi direttamente su una struct.

  • Re: ACCEDERE AI CAMPI DI UNA STRUCT

    Grazie della risposta minomic...ma non mi è chiara ancora una cosa.

    per esempio oggi ho fatto un programma che trattava una lista e un array di tipo struct...per accedere ai campi dalla lista dovevo usare la freccia..mentre per accedere ai campi dall'array ho dovuto utilizzare il punto.

    Ma scusa un array non è per definzione un puntatore a un tipo (in questo caso quello della struct)? e quindi non dovrebbe essere trattato anche lui con la freccia?

    non mi torna molto questo discorso...potresti farmi un esempio dei due casi!
  • Re: ACCEDERE AI CAMPI DI UNA STRUCT

    Non si capisce bene il problema che hai ... mostra le linee codice di cui parli e indica quello che non comprendi ...
  • Re: ACCEDERE AI CAMPI DI UNA STRUCT

    riccac ha scritto:


    Ma scusa un array non è per definzione un puntatore a un tipo (in questo caso quello della struct)? e quindi non dovrebbe essere trattato anche lui con la freccia?
    Allora... il nome di un array è il puntatore al primo elemento, però se tu fai ad esempio
    array[3]
    allora accedi all'elemento, cioè alla struct. Quindi devi poi utilizzare l'operatore punto:
    array[3].valore = quello_che_vuoi;
    Comunque segui il consiglio di oregon: posta il codice che ti dà problemi, così lo guardiamo.

  • Re: ACCEDERE AI CAMPI DI UNA STRUCT

    Quando usi "->" dereferenzi il puntatore, ovvero accedi all'area della memoria a cui punta l'oggetto, mentre col "." accedi diretamente all'area della memoria.
    "->" è una scorciatoia di come andrebbe usato un puntatore a struttura che sarebbe "(*a).valore" esattamente come si farebbe per tutti i puntatori.
    con i vettori di strutture il discorso non cambia. Vediamo un vettore semplice:
    v[0] == *(v)
    v[1] == *(v+1)
    v[n] == *(v+n)
    un vettore si strutture viene usato in egual modo:
    a[n].valore == (*(a+n)).valore
    in questo caso significa: a +n = muovo fino all'oggetto che mi interessa poi * dereferenzia il puntatore e quindi sei già nella memoria che ti serve e quindi puoi accederci direttamente tramite .
  • Re: ACCEDERE AI CAMPI DI UNA STRUCT

    Grazie mille a tutti.....ora ho capito la questione.
    Vi posto comunque il codice di cui parlavo per fare chiarezza.
    typedef struct _item{
    
      char *chiave;
    
      struct _item *next;
    
    } item;
    
    
    typedef struct _persona{
    
      char *nome;
    
      int età;
    
    } persona;
    
    se allocavo una lista ( item *lista) dovevo usare la freccia (->) mentre se allocavo un array di tipo persona (persona *array) dovevo usare il punto.

    Grazie ancora a tutti!
Devi accedere o registrarti per scrivere nel forum
6 risposte