Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642

    [C] Puntatori a Puntatori

    Ciao raga, non ho ben capito come si usano (e si sfruttano)
    i puntatori a puntatori !!!

    Chi mi sa dare una spiegazione o una buona guida esauriente (visto che non la ho ancora trovata)????


    Mille grazie, veramente!!

    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    un semplice esempio è un array di stringhe:

    codice:
    char* array_stringhe[];
    Quello è un puntatore a puntatore, ovvero un array che punta al primo elemento, in questo il primo elemento è un puntatore a char che punta al primo carattere della stringa.

    Altra utilità è per passare a riferimento un puntatore, ovvero se vuoi modificare il puntatore vero è proprio a non la cella di memoria a cui punta.

    Praticamente un puntatore a puntatore fa questo:

    codice:
    -----------|         -----------        -----------
    | int** ptr| ----->  | int* ptr2| ----> |   int   |
    |----------|         ------------       -----------
    ptr2 contiene l'indirizzo di memoria di int, e ptr quello di ptr2.
    In questo modo puoi passare a riferimento la cella di memoria di ptr2.

    Se non ricordo male il massimo è puntatore a puntatore a puntatore

    codice:
    int*** ptr_ptr_ptr;
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da netarrow
    Se non ricordo male il massimo è puntatore a puntatore a puntatore

    codice:
    int*** ptr_ptr_ptr;
    No, non credo che ci sia un limite, se non dato dal tipo di architettura. Questo codice, infatti, viene perfettamente compilato ed eseguito:
    codice:
    #include <stdio.h>
    
    int main() {
       int ****ptr;
       ptr = (int****) malloc(2 * sizeof(int***));
       *ptr = (int***) malloc(2 * sizeof(int**));
       **ptr = (int**) malloc(2 * sizeof(int*));
       ***ptr = (int*) malloc(2 * sizeof(int));
       ****ptr = 2;
       
       printf("Valore: %d\n", ****ptr);
       
       return 0;
    }
    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
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da LeleFT
    No, non credo che ci sia un limite, se non dato dal tipo di architettura. Questo codice, infatti, viene perfettamente compilato ed eseguito:
    codice:
    #include <stdio.h>
    
    int main() {
       int ****ptr;
       ptr = (int****) malloc(2 * sizeof(int***));
       *ptr = (int***) malloc(2 * sizeof(int**));
       **ptr = (int**) malloc(2 * sizeof(int*));
       ***ptr = (int*) malloc(2 * sizeof(int));
       ****ptr = 2;
       
       printf("Valore: %d\n", ****ptr);
       
       return 0;
    }
    Ciao.
    perfetto, era solo un dubbio ;-)
    Effetivamente, se è possibile fare array multidimensionali tipo doveva essere possibile fare anche puntatori di molti puntatori.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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.