Ciao a tutti!!!
Stavo rivedendo un po' le struct, e ho notato qualcosa di strano, mi spiego con un esempio
Primo codice
codice:
#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);
}
Secondo codice
codice:
#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 ovvero
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!