Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C] Doppi puntatori

  1. #1
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    66

    [c] doppi puntatori

    salve a tutti,
    non sono riuscito a trovare sulla rete un sito che spieghi bene i puntatori doppi e come funzionano.

    In pratica è, se io dichiaro int *p, allora questo rapprensenta l'indirizzo di memoria di una qualsivoglia variabile oppure di una funzione...

    ma, un puntatore doppio come funziona?

    se io ho

    int **p;

    su p cosa ho?
    su *p cosa ho?
    su**p cosa ho?

    io ho capito (non so se è giusto) che un puntatore punta ad un altro puntatore, ma io non capisco se questo puntatore puntato deve esistere o lo crea lui?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [c] doppi puntatori

    Originariamente inviato da FenixDown
    ma, un puntatore doppio come funziona?

    se io ho

    int **p;

    su p cosa ho?
    su *p cosa ho?
    su**p cosa ho?
    Un int** è semplicemente un puntatore che deve puntare ad un puntatore ad int.

    int var = 10;
    int *p1 = &var;
    int **p2 = &p1;

    Quindi p1 punta a var, p2 punta a p1. Ne consegue che le espressioni *p1 e **p2 fanno riferimento al valore presente in var.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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

    Re: [c] doppi puntatori

    Un puntatore, oltre ad essere un indirizzo, e' anche un valore (un numero). E quindi e' contenuto in una zona di memoria. Questa zona di memoria ha, a sua volta, un indirizzo (il puntatore al puntatore ...).

    Quando scrivi

    int **p;

    hai "creato" un puntatore ad un puntatore ... e' indifferente che il puntatore a cui si punta esista o no a questo punto ... e' importante che esista quando lo si usera'.

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    I doppi puntatori vengono generalmente usati quando è una funzione ad allocarti un puntatore (e quindi per un determinato motivo non puoi allocartelo tu da solo)

    codice:
    void getInt(int** t)
    {
        *t = new int;
    }
    Questa funzione è come per dire "Tu dammi l'indirizzo di un puntatore che te lo alloco io"
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Vedili un po' come delle matrici:
    codice:
    int **pt = NULL;
    int *p = NULL;
    int a = 5;
    
    /*Allocazioni*/
    pt = (char**)malloc(sizeof(char*)*numero_righe);
    for(i = 0; i < numero_righe; i++)
       *(pt+i) = (char*)malloc(sizeof(char)*numero_colonne);
    /**********/
    
    p = &a;
    pt = &p;
    *pt; /*Uguale a pt*/
    **pt; /*Uguale ad a*/
    
    pt++; /*Uguale a pt = &pt[1]*/
    pt = &p;
    (*pt)++; /*Uguale a p++*/
    Forse non ti sono molto di aiuto, ma ci ho provato.


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.