Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537

    [C] Interpretazione prototipo di funzione

    Non riesco ad interpretare il prototipo di questa funzione
    Codice PHP:
    void attraversa(List headvoid *resvoid visita(List,void *)) 
    Me lo sapreste spiegare in linguaggio naturale?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    attraversa è una funzione che ha tre argomenti: una variabile di tipo List, un puntatore a void ed un puntatore ad una funzione che a sua volta ha di due argomenti.

    Il contesto è un albero, giusto? Come già saprai un albero è visitabile in tre modi: pre-order, in-order e post-order. Vuoi un in-order? Passi come terzo parametro la funzione che si occupa di visitare l'albero in quel modo. Vuoi un pre-order? Cambi solo il puntatore, la funzione "attraversa" resta la stessa.
    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 wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537
    No si tratta di liste, cmq la cosa che non capivo è perchè per specificare il parametro "puntatore a funzione" è stato necessario anche mettere gli argomenti che prende.

    Non si può fare anche così?

    Codice PHP:
    void attraversa(List headvoid *res, (*visita)()) 
    e la chiamata essere così ?

    Codice PHP:
    attraversa(listaNULLstampa

  4. #4
    Originariamente inviato da wino_7
    No si tratta di liste, cmq la cosa che non capivo è perchè per specificare il parametro "puntatore a funzione" è stato necessario anche mettere gli argomenti che prende.
    Nella definizione della funzione è fondamentale specificare esattamente il prototipo della funzione puntata, dal momento che altrimenti il compilatore non potrebbe effettuare alcun genere di controllo su come questa viene richiamata e non sarebbe in grado di generare il codice di chiamata corretto. Nel prototipo serve per verificare direttamente al momento della compilazione della chiamata a attraversa che le sia passato un puntatore a funzione del tipo che si aspetta.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.