Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C] Doppio puntatore

  1. #1

    [C] Doppio puntatore

    Ciao a tutti.

    Qualcuno mi sa spiegare il doppio puntatore assegnato ad una variabile?

    Es: int **indice;ù

    Grazie

  2. #2
    Ciao a tutti.

    Qualcuno mi sa spiegare il doppio puntatore assegnato ad una variabile?

    Es: int **indice;ù
    Il doppio puntatore non si "assegna ad una variabile", piuttosto si può dire che definisci una variabile di tipo doppio puntatore,o meglio puntatore a puntatore.
    Allora tu sai (o almeno spero) che un puntatore non è che una variabile particolare atta a contenere un indirizzo di memoria.Questo indirizzo poi può essere l'indirizzo di una variabile,l'indirizzo di una funzione o l'indirizzo di un'altro indirizzo coem nel caso del punattore a puntatore.
    in altri termini quando tu definisci una variabile del tipo
    char* p, stai dicendo al compilatore che quella variabile punterà ad un carattere in memoria (in genere il primo carattere di una stringa) e che p+1 punterà al secondo carattere, p+2 al terzo etc..
    Se invece definisci una variabile del tipo char** p, stati dicendo al compilatore che p punterà ad una cella di memoria il cui contenuto
    sarà a sua volta un indirizzo (quello di un carattere in questo caso).

    A cosa può servire un puntatore a puntatore?
    Ad esempio può servire nel caso di una funzione che lavora con dei puntatori (manipolazione strutture dati dinamiche generalmente) e tu voglia modificare i valori di tali puntatori in maniera permanente in modo che le modifiche restino valide anche quando la funzione termina.E' il problema del passaggio per valore o per riferimento di una variabile,gli stessi principi che si applicano alle variabili normali si applicano anche ai puntatori.

    Esempio:

    Supponi di voler scrivere una funzione che prende come argomento un puntatore a carattere (di fatto una stringa) e incrementi il puntatore in modo che punti non al primo ma al secondio carattere della stringa.se tu fai quasto:

    codice:
    void ProssimoCarattere(char* stringa)
    {
         stringa++;
    } 
    
    main()
    {
         char* miastringa = "mamma";
         ProssimoCarattere(miastringa);
    }
    sia prima che dopo la funzione l'istruzione
    *miastringa ritorna il carattere 'm'


    se invece scrivi:
    codice:
    void ProssimoCarattere(char** stringa)
    {
         (*stringa)++;
    } 
    
    main()
    {
         char* miastringa = "mamma";
         ProssimoCarattere(&miastringa);
    }
    Prima della funzione *miastringa vale 'm'
    ma dopo vale 'a'.

    ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Grazie molto esauriente!!

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.