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

Discussione: * e & in cpp

  1. #1

    * e & in cpp

    ciao...........

    nn sono un lamer ....
    so che voi tutti siete abili professionisti , e di questo msg ve ne puo
    fregar de meno ..................
    vi capisco ...........................................
    ma se qualkuno mi da una risposta mi puo dar una mano .......
    mi sono ritrovato x mano alcuni libi di c++ :fondamenti dei programmazione c++ /di
    deitel e deitel , c++ in tasca e un altro che ha x autore stroustrup.
    sto cercando di imparare a programmare (il c++ mi ispira )
    parto da zero ,
    nn ho capito una cosa: *a e &b ......
    * fa si che la funzione nn cambi l' oggetto , mentre & si?
    ovvero una funzione con & modifica l' oggetto di main , mentre con * no?
    gli eseguibili davano questa impressione
    (mi sono spiegato male ma credo che qualkuno possa aver capito)......

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    :master:

    Ti riferisci ai puntatori?

  3. #3
    sii
    grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Allora mi sa che non hai capito una mazza

    int a; // Intero

    int *p; //Puntatore a Intero

    p = &a; //Ora p punta all'indirizzo di a


  5. #5
    (grazie x la mazza , lavazza forse)
    questo l' avevo capitoo........
    ma quando scrivo .
    int pun(int &a)
    { a++;
    cout << a << eco cosa combina la funz;
    }
    int main()
    {int c=2
    cout << c << prima della fuz;
    pun(c);
    cout << c << dopo funz;
    }
    c viene modificato

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    codice:
    int pun(int *a)
    { 
       a++;
       return a;
    }
    
    int main()
    {
       int c=2
       cout << c << "prima della funz.";
       pun(&c);
       cout << c << "dopo funz.";
    }
    Si scrive così...


  7. #7
    codice:
    #include <iostream>
    using namespace std;
    
    
    void func(int a, int &b, int *c, int *d)
    { 
        a++; 
        b++; 
        cout << "A:" << a << " B:" << b << " C:" << *c << " D:" << *d << " (durante)\n";
    }
    
    
    int main()
    {
        int a=1, b=4, *c, *d;
        c=&a; // 'c' punta ad 'a'
        d=&b; // 'd' punta a 'b'
        cout << "A:" << a << " B:" << b << " C:" << *c << " D:" << *d << " (prima)\n";
        func(a, b, c, d);
        cout << "A:" << a << " B:" << b << " C:" << *c << " D:" << *d << " (dopo)\n";
        system("PAUSE");
        return 0;
    }
    passaggio di un valore ad una copia di 'a'
    passaggio di un riferimento, quindi dell'indirizzo di memoria in cui risiede 'b'

    morale della favola...

    'a' della funzione main() ed
    'a' della funzione func() hanno due indirizzi di memoria differenti.

    mentre

    'b'...main() e
    'b'...func() hanno lo stesso indirizzo di memoria.

    conclusione:

    il valore di 'a' cambia soltanto in func()
    mentre il valore di 'b' cambia in entrambe le funzioni.

    'c' punta all'indirizzo di memoria di 'a' in main()
    e non di 'a' in func()

    mentre

    'd' punta all'indirizzo di 'b' in main()
    ma visto che 'b' (a differenza di 'a')
    la passo alla funzione func() come riferimento di memoria,
    'd' punta anche a 'b' in func()
    "STESSO INDIRIZZO" quindi stessa variabile.


    CMQ per capire meglio,
    prova ad eseguire il programma e osserva cosa cambia.
    ...Terrible warlords, good warlords, and an english song

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Sempre il solito esagerato! :gren:

  9. #9
    Sempre il solito esagerato! :gren:

    ...
    :master:
    codice:
    int pun(int *a)
    { 
       a++; // <-- guarda che 'A' è un puntatore
       return a; // <-- idem 
    }
    CASO MAI:
    codice:
    #include <iostream>
    using namespace std;
    
    int func(int *a, int &b)
    { 
       (*a)++;
       b++;
       cout << *a <<  "  " << b << " durante\n";
       return 0;
    }
    
    int main()
    {
       int a=2, b=4;
       cout << a << "  " << b << " prima\n";
       func(&a, b);
       cout << a << "  " << b << " dopo\n";
       system("PAUSE");
       return 0;
    }
    ANCHE se, secondo me, così è più difficile da capire (ed è anche differente il risultato)

    ...Terrible warlords, good warlords, and an english song

  10. #10
    @kpietro86
    morale della favola:
    SI, Avevi capito giusto!!!

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.