Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C] Puntatori

  1. #1
    federi
    Guest

    [C] Puntatori

    Ciao,

    Qualcuno può spiegarmi di precisono a cosa servono i puntatori? E come vengono utilizzati?

    hop letto la guida di html.it ma non ci ho capito molto.



    PS. Spero di non aver fatto un doppio topic, perchè prima che il forum si bloccasse avevo scritto questo topic, ma non sono riuscito a trovarlo neanche nel mio profilo, quindi penso che nella confusione non sia stato salvato... Ciao

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    I puntatori hanno moltissimi usi (elencarli tutti non credo sia conveniente).

    Ti faccio un esempio per capire l'importanza di un puntatore:

    se hai una funzione che riceve un parametro e questa funzione deve modificare questo parametro, senza nessun tipo di ritorno (una procedura, in poche parole, non una function) se non la modifica del parametro, devi dichiarare un puntatore:

    Questo programma, per esempio, non visualizza il valore corretto: il quadrato di 4 è 16 non 4!
    codice:
    void elevaAlQuadrato(int parametro) {
       parametro = parametro * parametro;
    }
    
    main() {
       int a = 4;
       elevaAlQuadrato(a);
       printf("Il quadrato è: %d\n", a);
    }
    Questo, invece, lo visualizza corretto:
    codice:
    void elevaAlQuadrato (int *parametro) {
       parametro = parametro * parametro;
    }
    
    main() {
       int a = 4;
       elevaAlQuadrato(&a);
       printf("Il quadrato è: %d\n", a);
    }
    Come si può notare, nella funzione è dichiarato un puntatore ad intero e nella chiamata gli si passa l'indirizzo dell'intero. A questo punto, la funzione modifica il valore contenuto nell'indirizzo 'parametro' (il valore della variabile a) cosicchè 'a' verrà modificato.


    Spero di essere stato sufficientemente chiaro (di solito non lo sono!)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Errata corrige nel codice (maledetta fretta!!!):
    codice:
    void elevaAlQuadrato (int *parametro) {
       *parametro = (*parametro) * (*parametro);
    }
    
    main() {
       int a = 4;
       elevaAlQuadrato(&a);
       printf("Il quadrato è: %d\n", a);
    }
    :quipy:

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    federi
    Guest
    codice:
    printf("Il quadrato è: %d\n", a);
    Solamente questa cose non mi è chiara, io creo il puntatore PARAMETRO e li punto A.

    E dopo per ottenere il risultato del quadrato perchè devo dare il valore di A e non ti &A?


  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    173
    il carattere & serve per restituire l'indirizzo di memoria a cui punta un ptr o quello di una variabile, quindi se te useresti la dicitura: &a, ti stamperebbe l'indirizzo di memoria riferito alla variabil a!

    CIAO

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.