Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    [C] puntatori

    In piccolo dubbio su puntatori

    se io ho:

    int *ciao;

    se voglio modificare il suo valore

    *ciao=10;
    giusto?

    se voglio modificarei l suo indirizzo

    ciao=&indirizzo_variabile;

    ecco...

    se voglio far in modo che un altro puntantore punti alla stessa variabile, che devo fare?

    int *p1,*p2;

    p1=&var1;

    voglio che p2 punti dove punta p1

    si fa

    p1=p2

    o

    *p1=*p2

    o

    p1 = &p2

    ????

  2. #2

    Re: [C] puntatori

    Originariamente inviato da FinalFantasy
    In piccolo dubbio su puntatori

    se io ho:

    int *ciao;

    se voglio modificare il suo valore

    *ciao=10;
    giusto?

    se voglio modificarei l suo indirizzo

    ciao=&indirizzo_variabile;

    ecco...

    se voglio far in modo che un altro puntantore punti alla stessa variabile, che devo fare?

    int *p1,*p2;

    p1=&var1;

    voglio che p2 punti dove punta p1

    si fa

    p1=p2

    o

    *p1=*p2

    o

    p1 = &p2

    ????
    Ciao Fantasy!! Provo a spiegarmi

    p1=p2; // assegna il valore di p2 a p1, in questo modo p1 puntera alla locazione di memoria dove punta p2

    *p1=*p2 // in questo modo la variabile puntata da p1 assume lo stesso valore della variabile puntanta da p2

    p1 = &p2 // in questo modo p1 deve essere un puntantore a puntatore, in quanto assegni a p1 l'indirizzo del puntatore p2. i puntantori a puntatori possono servire per il passaggio delle liste dinamiche per riferimento, per creare matrici dinamiche, etc

    Spero di essere stato utile

    Saluti!!!

  3. #3

    Re: [C] puntatori

    allora:

    un puntatore contiene semplicemente l'indirizzo di una variabile del suo stesso tipo!
    Quando crei un puntatore ci poni davanti il carattere di deferimento ( * ) che serve ad indicare al compilatore che quello e' un puntatore!

    un puntatore una volta creato nn punta a niente, e' necessario risolvere il riferimento !

    Questo riferimento del puntatore va risolto o assegnandoli un indirizzo di una variabile del suo stesso tipo ( quindi con & ) oppure assegnando un puntatore che io chiamo dello stesso livello, diciamo dello stesso grado di deferimento....( detto cosi proprio rozzamente --> assegnando un puntatore con lo stesso numero di ( * ) ) !

    ti faccio un esempio...

    Codice PHP:

    int 
    *ptr, *punt/*definisco due puntatori*/

    int **super_ptr;/*puntatore di puntatore ad un intero*/

    int uno=5;

    /*a questo punto ho due puntatori un doppio puntatore ad intero ed un intero.
    per far puntare un puntatore alla variabile "uno" gli assegno il suo indirizzo*/

    ptr=&uno;

    /*a questo punto ptr punta ad uno
    - se stampi ptr senza l'operatore ( * ) troverai l'indirizzo contenuto in ptr
    - se stampi *ptr inveci ottieni il contenuto della variabile puntata
    - se stampi &(*ptr) ottieni l'indirizzo della variabile puntata
    */


    /*
    mettiamo il caso che tu voglia cambiare il valore della varibile uno indirettamente...poni semplicemente *ptr=valore;
    */

    *ptr=50;

    /*per far si che il secondo puntatore punti alla stessa cosa a cui punta il primo puoi farlo in due modi o procedi nuovamente con un operazione di assegnamento tramite & oppure un semplice assegnamento tra i due puntatori*/

    punt=ptr;

    /*in ultimo t mostro un altro esempio*/

    super_ptr=&ptr;/*faccio puntatore super_ptr a ptr che a sua volta punta a uno*/

    /*vediamo se hai capito
    (nn compilarlo prova a ragionarci ! )

    - se stampo *super_ptr ( con un solo * ) cosa ottengo a video???

    - se lo stampo cosi **supe_ptr( con due)???

    - e cosi super_ptr ???

    - e cosi &super_ptr ???

    */ 
    dai nn e' difficile. . . .

    . . .spero di essere stato chiaro!
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  4. #4

    Re: [C] puntatori

    Originariamente inviato da FinalFantasy

    ciao=&indirizzo_variabile;
    forse volevi semplicemente dire

    ciao=&variabile;

    .....
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C] puntatori

    Originariamente inviato da FinalFantasy
    In piccolo dubbio su puntatori
    Mi sa che non hai "piccoli" dubbi sui puntatori ...

  6. #6
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    il problema è il seguente...
    x quando i guarda i puntatori sono quasi ok..
    ma quelli ke nn riesco a capire sono i doppi puntatori...

    che vuol dire che **ciao è un doppio puntatore o un puntatore a un puntatore?

    sul mio libro i doppi puntatori credo che non ci stanno...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mi dispiace deluderti, ma da quello che hai scritto prima, secondo me, tu hai parecchi dubbi anche sui puntatori semplici ...

    Per quanto riguarda i puntatori doppi, anche questo e' un concetto molto semplice. Sono semplicemente dei puntatori a puntatori. Ovvero, se un puntatore contiene l'indirizzo in memoria di un dato, un doppio puntatore contiene l'indirizzo in memoria di un puntatore a un dato.

  8. #8
    il discorso e' sempre quello. . .

    un puntatore consideralo come una variabile che contiene un indirizzo di un'altra variabile! praticamente ha un indicazione su quale area di memoria si trova la variabile a cui punta quindi che contenga l'indirizzo di una varibile "normale" o di un puntatore nn cambia nulla. . .quello a cui devi stare attento e che un doppio triplo quadruplo puntatore puo avere o lo stesso contenuto di un puntatore del suo stesso tipo o l'indirizzo di un puntatore di un grado inferiore o se di primo quello di una variabile "normale".

    esempi:

    4 deferimenti
    ****ciao a questo puntatore puoi assegnarci o ****ariciao oppure &(sao)

    dove sao e' ad esempio int ***sao;

    3 deferimenti
    ***ciao ci assegni o un altro puntatore con tre deferimenti oppure l'indirizzo di un puntatore con due deferimenti

    2 deferimenti
    **ciao ci assegni o un puntatore del suo stesso tipo quindi con due deferimenti oppure l'indirizzo di un puntatore con un deferimento.

    1 deferimento
    *ciao caso piu semplice a cui puoi assegnarci o il contenuto d un altro puntatore allo stesso tipo o l'indirizzo di una variabile "normale"

    ovviamente se definisci puntatori con 4 deferimenti questo implica che tu debba definirne almeno uno con 3 con 2 con uno e poi all'ultimo assegnarci una variabile. . .


    spero di essere stato esauriente !
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  9. #9
    Originariamente inviato da oregon
    Mi dispiace deluderti, ma da quello che hai scritto prima, secondo me, tu hai parecchi dubbi anche sui puntatori semplici ...

    Per quanto riguarda i puntatori doppi, anche questo e' un concetto molto semplice. Sono semplicemente dei puntatori a puntatori. Ovvero, se un puntatore contiene l'indirizzo in memoria di un dato, un doppio puntatore contiene l'indirizzo in memoria di un puntatore a un dato.
    Domanda OT: ma nella pratica si usano puntatori di livello superiore a 2? Detto in altri termini puntatori tripli,quadrupli etc che applicazioni potrebbero trovare? Cosi su due piedi userei al limite i puntatori tripli per fare una struttura dati tridimensionale dinamica Ma direi che siamo nel campo della fantascienza lol

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Originariamente inviato da UltraBeginner
    Domanda OT: ma nella pratica si usano puntatori di livello superiore a 2? Detto in altri termini puntatori tripli,quadrupli etc che applicazioni potrebbero trovare? Cosi su due piedi userei al limite i puntatori tripli per fare una struttura dati tridimensionale dinamica Ma direi che siamo nel campo della fantascienza lol
    Beh... prova a pensare ad un array tridimensionale di stringhe...
    Applica questo concetto ricorsivamente e ti accorgerai che non è poi tutta fantascienza.


    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

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.