Skip to the content.

Puntatori in C: Guida Completa

1. Cos’è un puntatore?

Un puntatore è una variabile che non contiene un valore, ma l’indirizzo di memoria di un’altra variabile.

Esempio:

int x = 10;
int *p = &x;

2. Visualizzazione in Memoria

Indirizzo Contenuto
0x1000 p = 0x2000
0x2000 x = 10

3. Operatori Fondamentali

a) Operatore & (address-of)

Restituisce l’indirizzo di una variabile.

&x  // indirizzo di x
&p  // indirizzo di p

b) Operatore * (dereferenziazione)

Restituisce il valore puntato dal puntatore.

*p  // valore di x (10)

4. Modifica Tramite Puntatore

Modificando *p, si modifica direttamente x:

*p = 20;

5. Tipi e Coerenza

Il tipo del puntatore deve corrispondere al tipo della variabile puntata:

int x;
int *p = &x;   // OK
float *f = &x; // SBAGLIATO

6. Errori Tipici


7. Puntatori e Funzioni

I puntatori permettono di modificare variabili esterne a una funzione. Esempio:

int add_two(int *n) {
    *n = *n + 2;
    return *n;
}
int main() {
    int numero = 5;
    add_two(&numero);
    // Ora numero = 7
    return 0;
}

8. Puntatori e Stringhe

In C non esiste un tipo “stringa”: una stringa è un array di char terminato da \0.

a) Dichiarazione e Inizializzazione

char *s = "Hello";

b) Aritmetica dei Puntatori

c) Equivalenza


9. Quando Usare i Puntatori?


10.Scorrere una Stringa

#include <stdio.h>

int main() {
    char *s = "Hello";
    while (*s != '\0') {
        printf("%c ", *s);
        s++;
    }
    // Stampa: H e l l o
    return 0;
}

¹ In C, quando passi una struttura a una funzione per valore, viene creata una copia della struttura, il che può essere inefficiente per strutture grandi. Per evitare questo, puoi passare un puntatore alla struttura.