Puntatori
Puntatori in C
In linguaggio C, i puntatori sono variabili speciali che contengono l'indirizzo di memoria di un'altra variabile. Possono essere utilizzati per manipolare direttamente i dati in memoria e offrono una flessibilità significativa nel gestire le informazioni.
Dichiarazione di Puntatori
Per dichiarare un puntatore, è necessario specificare il tipo di dato a cui punterà il puntatore. Ad esempio, un puntatore a un intero (`int`) sarà dichiarato come segue:
int* puntatoreInt;
Assegnazione di Indirizzo
Per assegnare l'indirizzo di memoria di una variabile a un puntatore, utilizziamo l'operatore di indirizzo `&`:
int variabile = 42;
int* puntatoreInt = &variabile;
Ora `puntatoreInt` contiene l'indirizzo di memoria della variabile `variabile`.
Assegnazione di Indirizzo
Per accedere al valore puntato da un puntatore, utilizziamo l'operatore di dereferenziazione `*`.
printf("Valore della variabile: %d\n", *puntatoreInt);
Questo stamperà il valore della variabile a cui il puntatore sta puntando.
Modifica del Contenuto
Possiamo utilizzare il puntatore per modificare il valore della variabile a cui punta:
*puntatoreInt = 55;
printf("Nuovo valore della variabile: %d\n", variabile);
Ora la variabile `variabile` sarà 55.
Puntatori a Void
Il tipo di puntatore `void*` è un tipo generico che può puntare a qualsiasi tipo di dato. Può essere utile quando il tipo di dato specifico non è noto in anticipo.
void* puntatoreGenerico;
int numero = 10;
puntatoreGenerico = №
Aritmetica dei Puntatori
È possibile eseguire operazioni aritmetiche sui puntatori, ad esempio incrementare o decrementare un puntatore:
int array[] = {1, 2, 3, 4, 5};
int* p = array;
printf("%d\n", *p); // Stampa il valore del primo elemento
p++; // Incrementa il puntatore
printf("%d\n", *p); // Stampa il valore del secondo elemento
Allocazione Dinamica di Memoria
I puntatori sono spesso utilizzati in combinazione con le funzioni `malloc`, `calloc`, e `free` per l'allocazione e la deallocazione dinamica della memoria:
int* puntatoreDinamico = malloc(sizeof(int));
*puntatoreDinamico = 100;
free(puntatoreDinamico); // Dealloca la memoria quando non è più necessaria
È importante gestire attentamente la memoria allocata dinamicamente per evitare perdite di memoria.