Ciao a tutti!!!
Stavo rivedendo un po' le struct, e ho notato qualcosa di strano, mi spiego con un esempio
Primo codice
Secondo codicecodice:#include <stdio.h> typedef struct prova{ char str[20]; int num; }PRO; void scrivi(PRO *s); void stampa(PRO s); int main() { PRO s; scrivi(&s); stampa(s); return 0; } void scrivi(PRO *s) { printf("\nInserire una stringa: "); scanf("%s", s->str); printf("\nInserire un numero: "); scanf("%d", &s->num); } void stampa(PRO s) { printf("\n\nStr: %s", s.str); printf("\nnum: %d", s.num); }
Come avete potuto notare tra i due codici c'è una differenza ovverocodice:#include <stdio.h> typedef struct prova{ char str[20]; int num; }PRO; void scrivi(PRO *s); void stampa(PRO s); int main() { PRO s; scrivi(&s); stampa(s); return 0; } void scrivi(PRO *s) { printf("\nInserire una stringa: "); scanf("%s", &s->str); printf("\nInserire un numero: "); scanf("%d", &s->num); } void stampa(PRO s) { printf("\n\nStr: %s", s.str); printf("\nNum: %d", s.num); }
nel primo uso
scanf("%s", s->str);
mentre nel secondo
scanf("%s", &s->str);
Tuttavia anche con questa differenza i due codici funzionano allo stesso modo, perché?
Per me dovrebbe funzionare solo nel primo caso infatti il campo str della struttura è un vettore di caratteri quindi &str[0]==str.
Cosa non sto considerando? qualcuno potrebbe spiegarmi perché nel secondo caso non succede nulla di strano?
Ringrazio tutti anticipatamente!

Rispondi quotando