PDA

Visualizza la versione completa : [sizeof .... struct] in C


nemo74na
22-12-2004, 16:11
Salve,
aiutatemi a fare questo conticino.

Dunque ho questo codice:

#define LEN (20);

typedef struct (
int i; (i: 4 bytes)
lword pippo; (pippo: 4 bytes)
char pluto[LEN]; (pluto[]: 20 elementi * 1 byte = 20 bytes)
prova2 papero; (papero: 8 bytes)
) prova1;

typedef struct (
int j; (j: 4 bytes)
lword papera; (papera: 4 bytes)
) prova2;

sizeof(prova1) = 36 bytes ????

Ho fatto bene i calcoli?

Grazie

Ilmalcom
22-12-2004, 16:51
Stando a quello che so, la dimensione di una struttura non necessariamente la somma delle dimensioni dei suoi elementi. E' per questo che sempre meglio usare l'operatore sizeof...

honneamise
22-12-2004, 18:25
"sizeof will return the number of bytes reserved for a variable or data type."

se devi saperlo prova con roba tipo :

printf("%d \n", sizeof(prova1));//forse per le struct vuole il cast ?

Ilmalcom
22-12-2004, 18:29
Originariamente inviato da honneamise
"sizeof will return the number of bytes reserved for a variable or data type."

se devi saperlo prova con roba tipo :

printf("%d \n", sizeof(prova1));//forse per le struct vuole il cast ?
Che cast? :fagiano: Non serve alcun cast :)

Ed_Bunker
26-12-2004, 11:51
Non penso che la dimensione della struct sia data dalla somma delle dimensioni degli elementi visto che, ad esempio,
char pluto[LEN];
e' nient'altro che un puntatore e percio' penso occupi solo lo spazio necessario per memorizzare un puntatore (E non 20 byte).
(I 20 byte saranno necessari, semmai, nell'area di mem. puntata dal puntatore contenuto nella struct.)

Ilmalcom
26-12-2004, 12:15
Originariamente inviato da Ed_Bunker
Non penso che la dimensione della struct sia data dalla somma delle dimensioni degli elementi visto che, ad esempio,
char pluto[LEN];
e' nient'altro che un puntatore e percio' penso occupi solo lo spazio necessario per memorizzare un puntatore (E non 20 byte).
(I 20 byte saranno necessari, semmai, nell'area di mem. puntata dal puntatore contenuto nella struct.)
Vero, ma le strutture non sono collegate ai puntatori cos fortemente come gli array :fagiano: Ci sono altri motivi per cui, in generale, la dimensione di una struttura non la somma delle dimensioni dei campi..

Loading