Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] Ritorno d + valori da funz

    Raga ho una funzione "partiziona";

    la chiamata è Partiziona(testa, coda, perno);

    All'interno di partiziona lavoro con altre variabili, ma alla fine di tutto devo fare ritornare testa, coda e perno aggiornati ai valori della funzione appena finita...

    void Partiziona(lista *testa, lista *coda, lista *perno){

    lista *elc, *indice, *prec;
    ...
    perno = testa;
    testa = elc;
    coda = prec;
    }

    Come faccio a fare in modo che nel main i valori di testa, coda e perno siano cambiati!!!

    Nn posso fare testa = Partiziona(...), xkè avrei solo un valore aggiornato e gli altri no!!!

    Grazie!!!
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  2. #2
    Se tu passi i valori in maniera classica nn ti modificherà gli originali, ma ti modificherà delle copie e quindi nel main i valori nn cambieranno.
    Devi quindi passare le variabili per reference, così che la funzione cambi i valori agli originali.

    codice:
     
    void Partiziona(lista &testa, lista &coda, lista &perno){
    Per dei listati sulle code e su un po' di liste dinamiche vai qui: http://www.laser.dist.unige.it/Repos...enti/Esercizi/

    Bye
    Conquista la folla, e conquisterai la libertà (Proximus - Il gladiatore)
    Il riferimento italiano per i Fans di Final Fantasy
    Scandalos member of APE

  3. #3
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Ma siccome in C non si può...

    La soluzione è usare un puntatore per i parametri (proprio come ha fatto Habdul!)

    Esempio:
    codice:
    void Incrementa(int *a, int *b, int *c)
    {
    *a += 2;
    *b += 7;
    *c += 200;
    }
    che modifica i parametri

  4. #4
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Originariamente inviato da iguana13
    Ma siccome in C non si può...

    La soluzione è usare un puntatore per i parametri (proprio come ha fatto Habdul!)

    Esempio:
    codice:
    void Incrementa(int *a, int *b, int *c)
    {
    *a += 2;
    *b += 7;
    *c += 200;
    }
    che modifica i parametri
    Esatto!
    Però se nel main hai già dei puntatori se passi per indirizzo ti da problemi, devi dichiarare la funzione così
    codice:
    void Partiziona(lista **testa, lista **coda, lista **perno){ 
    
           lista *elc, *indice, *prec; 
           ... 
           *perno = *testa; 
           *testa = *elc; 
           *coda = *prec; 
    }
    Nella chiamata della funzione poi devi usare la '&' (Cioè passare l'indirizzo del puntatore a testa ecc)
    codice:
    partiziona(&testa,&coda,&perno);

  5. #5
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Ah, giusto, mi dimenticavo che si trattava di una lista!

    Comunque se x linguaggio usa il C e non C++, nn può usare i parametri-indirizzo

  6. #6
    Originariamente inviato da iguana13
    Comunque se x linguaggio usa il C e non C++, nn può usare i parametri-indirizzo
    Anche oggi ho imparato una cosa nuova
    Bye
    Conquista la folla, e conquisterai la libertà (Proximus - Il gladiatore)
    Il riferimento italiano per i Fans di Final Fantasy
    Scandalos member of APE

  7. #7
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Originariamente inviato da iguana13
    Comunque se x linguaggio usa il C e non C++, nn può usare i parametri-indirizzo
    Questa non l'ho capita.... mi spieghi meglio

  8. #8
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    In C89 (ma credo anche in C99) non puoi dichiarare una funzione come:
    codice:
    void incrementa(int &n1, int &n2);
    mentre in C++ puoi farlo ed è una cosa molto utile!

    In C devi per forza usare per parametri dei puntatori!

  9. #9
    Certo che i puntatori in C sono una gran scocciatura, però risolvono tanti problemi nella gestione delle variabili!!!
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  10. #10
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Originariamente inviato da iguana13
    In C89 (ma credo anche in C99) non puoi dichiarare una funzione come:
    codice:
    void incrementa(int &n1, int &n2);
    mentre in C++ puoi farlo ed è una cosa molto utile!

    In C devi per forza usare per parametri dei puntatori!
    Non si finisce mai di imparare.... io avevo sempre uitilizzato *... anche in c++.....

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.