PDA

Visualizza la versione completa : [C] Puntatori a Puntatori


Trusty
09-02-2005, 10:56
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!!

:ciauz: :ciauz:

netarrow
09-02-2005, 11:45
un semplice esempio un array di stringhe:



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:



-----------| ----------- -----------
| 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



int*** ptr_ptr_ptr;


:ciauz:

LeleFT
09-02-2005, 13:10
Originariamente inviato da netarrow
Se non ricordo male il massimo puntatore a puntatore a puntatore



int*** ptr_ptr_ptr;


:ciauz:
No, non credo che ci sia un limite, se non dato dal tipo di architettura. Questo codice, infatti, viene perfettamente compilato ed eseguito:


#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. :ciauz:

netarrow
09-02-2005, 13:15
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:


#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. :ciauz:

perfetto, era solo un dubbio ;-)
Effetivamente, se possibile fare array multidimensionali tipo doveva essere possibile fare anche puntatori di molti puntatori.

:ciauz:

Loading