Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [c] Strutture

  1. #1

    [c] Strutture

    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)?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dipende dalla struttura ... se ci sono puntatori, no.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Una struttura del genere va bene?(Le variabili sono messe in memoria una dietro l'altra o ci sono dei buchi?)

    codice:
    typedef char stringa[50];
    
    typedef struct record{
       stringa nome;
       stringa cognome;
       int anno;
       stringa id;
    }record;
    Quando faccio il confronto mi dice: Illegal operation

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E come lo fai il confronto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Chiaramente facendo s == s1
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da XWolverineX
    Chiaramente facendo s == s1
    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).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Su alcune architetture però ci potrebbero essere dei buchi, per esempio se il processore richiede che gli interi siano allineati a 64 bit.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    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 un interessante articolo sull'argomento del solito Raymond Chen.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    59
    azzerando le strutture con una memset anche i buchi saranno tutti a zero, quindi non influiscono sul confronto con la memcmp

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.