Due domande sulle struct in C
1)
è un problema se chiamo il membro di una struct con lo stesso nome di una variabile?
esempio
2)
in riferimento all'esempio di prima, supponiamo di avere una funzione
double media(double*);
che mi restituisca la media di un array di double... come faccio a fare la media dei prezzi di 100 Macchina?
ad esempio ho dichiarato un array
Macchina m[100];
e voglio la media dei prezzi usando la funzione media che ho scritto sopra... ho provato a chiamare
media(m.prezzo);
ma mi dà errore, grazie...
è un problema se chiamo il membro di una struct con lo stesso nome di una variabile?
esempio
typedef struct { char nome[256]; double prezzo; }Macchina; int main() { char nome[256]; printf("%s",nome); return 0; }
2)
in riferimento all'esempio di prima, supponiamo di avere una funzione
double media(double*);
che mi restituisca la media di un array di double... come faccio a fare la media dei prezzi di 100 Macchina?
ad esempio ho dichiarato un array
Macchina m[100];
e voglio la media dei prezzi usando la funzione media che ho scritto sopra... ho provato a chiamare
media(m.prezzo);
ma mi dà errore, grazie...
Risposte
1. No, le variabili sono in scope diversi e quindi i nomi non vanno in conflitto.
2. media(m.prezzo) non riceve in ingresso un double*, quindi non può funzionare.
Devi creare una nuova funzione che accetta in ingresso un array di Macchina e accede al dato prezzo di ciascuna macchina in maniera esplicita.
Non credo che in C tu possa chiamare la seconda funzione allo stesso modo, comunque...
2. media(m.prezzo) non riceve in ingresso un double*, quindi non può funzionare.
Devi creare una nuova funzione che accetta in ingresso un array di Macchina e accede al dato prezzo di ciascuna macchina in maniera esplicita.
Non credo che in C tu possa chiamare la seconda funzione allo stesso modo, comunque...
ok. grazie
Nota che in questo caso ha più senso lavorare con una struct of array piuttosto che con un array of struct. Infatti il dato nome risulta generalmente inutile nei calcoli e quindi occupa inutilmente memoria cache.
??
non ho capito cosa intendi per array of struct, o meglio: cosa intendi in questo caso
non ho capito cosa intendi per array of struct, o meglio: cosa intendi in questo caso
Nell'esempio che hai posto vorrebbe dire avere una struttura
Questo approccio dovrebbe essere più efficiente dato che dovrebbe ridurre notevolmente i cache misses. Ovviamente richiede codici as hoc per la gestione della memoria.
typedef struct { char (* nomi)[256]; // puntatore ad array di 256 char double * prezzi; } AoMacchine;oppure
typedef struct { char nomi[100][256]; double prezzi[100]; } AoMacchine;se non vuoi usare la memoria dinamica. In questo modo potresti calcolare la media come
AoMacchine AoM; // codice per inizializzare AoM value = media(AoM.prezzi);
Questo approccio dovrebbe essere più efficiente dato che dovrebbe ridurre notevolmente i cache misses. Ovviamente richiede codici as hoc per la gestione della memoria.
thanks