Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    11

    [C] Spiegazione codice per ordinare

    Buongiorno,
    vorrei avere alcune delucidazioni riguardo questo codice
    codice:
    int compare (const void * a, const void * b) 
     {   
    return ( *(int*)a - *(int*)b );
    }
    So a cosa serve, ma non mi è chiaro cosa voglia dire "void * a", ad esempio, o ciò che fa il return (e a cosa servono tutti gli asterischi). Se potreste aiutarmi vi sarei grato
    Buona giornata!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    void* è un puntatore a "qualsiasi" cosa.

    Nel caso in questione il programmatore sa che lavorerà con interi e pertato fa il cast corretto:

    (int*)a

    Ora hai un puntatore ad un intero. A te serve il valore che c'è nella cella però, non il suo indirizzo. Ecco quindi *(int*)a

    Il return fa la differenza tra il valore intero contenuto in a e quello contenuto in b e la restiuisce in modo da stabilire un criterio per l'ordinamento.

    Per avere un ordinamento crescente si restituisce un numero > 0 se a > b, 0 se a == b o un numero negativo se a < b.

    ps: se non sai cosa sono i puntatori vatteli a studiare, sono una parte molto complessa e importate del C, direi fondamentale.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    void * indica un puntatore ad un dato di cui non si conosce il tipo

    int * indica un puntatore ad un intero


    *(int *)a

    fa riferimento al valore intero puntato dal puntatore a (e lo stesso per b)

    Il return restituisce la differenza tra i due interi ottenuti come ti ho detto.

    Magari non avrai chiarito tutti i tuoi dubbi ma questo succede perché queste cose non vanno spiegate in un forum ma acquisite, con il giusto studio e la necessaria pazienza, dai libri che trattano il linguaggio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    void serve a passare ogni tipo di dato
    return a "ritornare" un valore
    i * sono deferenze dei puntatori
    (int *) è una conversione in un puntatore ad int

    Un consiglio: leggi un libro sul C perchè è difficile spiegare le basi di un linguaggio in un forum
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    11
    Vi ringrazio, diciamo che mi era necessaria una spiegazione "immediata" di quel codice Per il resto mi sto, pazientemente, applicando a studiare anche i puntatori.
    Grazie a tutti!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.