PDA

Visualizza la versione completa : [c] Strutture


davide94
16-11-2009, 22:19
Ciao a tutti, sono nuovo.
Sto studiando C ed avevo due domande:
Si possono confrontare due strutture?
I membri di una struttura sono memorizzati in modo sequenziale in memoria(uno dietro l'altro)?

oregon
16-11-2009, 22:20
Dipende dalla struttura ... se ci sono puntatori, no.

davide94
17-11-2009, 06:28
Una struttura del genere va bene?(Le variabili sono messe in memoria una dietro l'altra o ci sono dei buchi?)




typedef char stringa[50];

typedef struct record{
stringa nome;
stringa cognome;
int anno;
stringa id;
}record;


Quando faccio il confronto mi dice: Illegal operation

oregon
17-11-2009, 07:04
E come lo fai il confronto?

XWolverineX
17-11-2009, 07:10
Chiaramente facendo s == s1 :fighet:

oregon
17-11-2009, 07:13
Originariamente inviato da XWolverineX
Chiaramente facendo s == s1 :fighet:

Ovviamente, così non va bene.

Si deve usare la funzione memcmp avendo cura che le strutture da confrontare siano inizializzate a zero (con una memset).

MItaly
17-11-2009, 14:24
Su alcune architetture però ci potrebbero essere dei buchi, per esempio se il processore richiede che gli interi siano allineati a 64 bit.

oregon
17-11-2009, 14:26
Originariamente inviato da MItaly
Su alcune architetture però ci potrebbero essere dei buchi, per esempio se il processore richiede che gli interi siano allineati a 64 bit.

Si possono usare apposite pragma per l'allineamento.

MItaly
17-11-2009, 14:28
Certamente (e infatti gli header di Windows sono pieni di #pragma packed o roba del genere, specie per gli header dei file), dico solo che quella struttura scritta così senza aggiungerci altro potrebbe avere dei buchi nel suo layout in memoria.
Qui (http://blogs.msdn.com/oldnewthing/archive/2007/12/27/6873648.aspx) un interessante articolo sull'argomento del solito Raymond Chen.

bitman
17-11-2009, 14:42
azzerando le strutture con una memset anche i buchi saranno tutti a zero, quindi non influiscono sul confronto con la memcmp

Loading