[c++] Passare un puntatore ad una funzione
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 11 di 11

Discussione: [c++] Passare un puntatore ad una funzione

Cambio titolo
  1. #1
    Inuyasha89
    Ospite

    [c++] Passare un puntatore ad una funzione

    Semplice domanda: è possibile passare un puntatore ad una funzione?
    So che, nel passaggio di variabili per riferimento, il compilatore passa l'indirizzo di un parametro attuale ad un puntatore che è un parametro formale.
    Ma se io come parametro attuale avessi un puntatore, e lo volessi passare ad una funzione, come faccio?
    Si può fare?

    Io volevo farlo, ma un programma non mi funzionava.
    Nel debugging ho scoperto che il passaggio dalla funione al main non funzionava. I valori all'interno della funzione, e nel main, erano diversi.

    Se si può fare, cosa mi sfugge?
    Grazie.

  2. #2
    N Y A N ! L'avatar di Iron84
    Registrato il
    04-05
    Località
    Ferrara (provincia)
    Messaggi
    6.131
    non ho praticamente mai usato il c++, ma non basta che passi il puntatore per valore e non per riferimento?

  3. #3
    Inuyasha89
    Ospite
    Citazione Iron84 Visualizza Messaggio
    non ho praticamente mai usato il c++, ma non basta che passi il puntatore per valore e non per riferimento?
    A dir la verita', quando ho fatto il programma, e non ha funzionato, non ho passato ne' per valore, ne per riferimento. Ma solo perche' il compilatore mi dava errore in entrambi i casi. Su Google ho cercato info, ma non ho trovato nulla, ecco perche' sono venuto qui.

  4. #4
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    non sono sicuro di aver capito bene quello che vuoi fare. vuoi che le modifiche al puntatore in sé (oltre che all'oggetto puntato) siano visibili al di fuori della funzione? in questo caso di servono i puntatori a puntatori. una roba del tipo
    int **a;

  5. #5
    Inuyasha89
    Ospite
    Citazione devilheart Visualizza Messaggio
    non sono sicuro di aver capito bene quello che vuoi fare. vuoi che le modifiche al puntatore in sé (oltre che all'oggetto puntato) siano visibili al di fuori della funzione? in questo caso di servono i puntatori a puntatori. una roba del tipo
    int **a;
    A questo non c'avevo pensato, ci provero'. Grazie.

  6. #6
    Il pazzo!! L'avatar di roby65
    Registrato il
    07-04
    Messaggi
    1.294
    Codice:
    void funzione(int* p)
    {
    cout<<"Il puntatore punta al valore "<<(*p)<<endl;
    }
    
    int main()
    {
    int variabile=20;
    int *variabile2=new int;
    (*variabile2)=50;
    funzione(&variabile);
    funzione(variabile2);
    }
    Non so se ho capito bene ma è questo che intendi?

  7. #7
    Inuyasha89
    Ospite
    Citazione devilheart Visualizza Messaggio
    non sono sicuro di aver capito bene quello che vuoi fare. vuoi che le modifiche al puntatore in sé (oltre che all'oggetto puntato) siano visibili al di fuori della funzione? in questo caso di servono i puntatori a puntatori. una roba del tipo
    int **a;
    Non funziona, il compilatore restituisce un errore di "conversione invalida da *int a **int".

    Citazione roby65 Visualizza Messaggio
    Codice:
    void funzione(int* p)
    {
    cout<<"Il puntatore punta al valore "<<(*p)<<endl;
    }
     
    int main()
    {
    int variabile=20;
    int *variabile2=new int;
    (*variabile2)=50;
    funzione(&variabile);
    funzione(variabile2);
    }
    Non so se ho capito bene ma è questo che intendi?
    Si, è questo.

    Però, non capisco il perchè, se alloco memoria nella funzione, questa restituisce dei valori sballati al main. Sia per quanto riguarda l'indirizzo di memoria, sia per quanto riguarda il valore puntato.


    Provate a spostare il new int nella funzione...visualizzate i valori nella funzione, poi nel main.
    edit: ecco...
    Codice:
    #include <iostream>
    using namespace std;
    #define NEWLINE cout<<endl;
    void funzione (int *b);
    int main(){
        int *p;
        funzione (p); 
        cout << "--- NEL MAIN ---"; NEWLINE
        cout << "p=" << p; NEWLINE
        cout << "*(p)=" << *(p); NEWLINE
        cout << "p[0]=" << p[0]; NEWLINE NEWLINE
        system ("pause");
    }
    void funzione (int *b){
         b=new int;
         *b=1;
         cout << "--- NELLA FUNZIONE ---"; NEWLINE
         cout << "p=" << b; NEWLINE
         cout << "*(p)=" << *(b); NEWLINE
         cout << "p[0]=" << b[0]; NEWLINE NEWLINE
    }
    Ultima modifica di Inuyasha89; 7-09-2009 alle 13:12:23

  8. #8
    Inuyasha89
    Ospite
    Aggiornamento: Ho capito quale è il problema.
    Praticamente in tutti i modi visti e provati finora, il puntatore è sempre stato passato per valore.
    Allora mi chiedo, qual'è la sintassi per passare un puntatore per riferimento?

  9. #9
    Il pazzo!! L'avatar di roby65
    Registrato il
    07-04
    Messaggi
    1.294
    Codice:
    void funzione(int **p)
    {
    (*p)=new int;
    (**p)=10;
    }
    
    int main()
    {
    int *p;
    funzione(&p);
    cout<<(*p)<<endl;
    }

  10. #10
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    Citazione Inuyasha89 Visualizza Messaggio
    Aggiornamento: Ho capito quale è il problema.
    Praticamente in tutti i modi visti e provati finora, il puntatore è sempre stato passato per valore.
    Allora mi chiedo, qual'è la sintassi per passare un puntatore per riferimento?
    quella che ti ho detto prima
    comunque visto quello che vuoi fare è meglio che la funzione restituisca il puntatore aggiornato
    Ultima modifica di devilheart; 7-09-2009 alle 20:26:30

  11. #11
    Inuyasha89
    Ospite
    Risolto.
    Grazie a roby e devilheart

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •