Home Insegnanti Contattami Portfolio

Puntatori

Puntatori

int altezza = 30;

    printf("%d", altezza);  // output -> 30
    printf("%p", &altezza); // output -> indirizzo di memoria di altezza (0x7ffe5367e044)

Un Puntatore è una variabile che salva l’indirizzo di memoria di un’altra variabile come suo valore.

Una variabile puntatore punta ad un tipo di dato (come int) dello stesso tipo e viene creato con l’operatore *.

Esempio di puntatore:

int altezza = 30;
    
    // variabile puntatore di nome ptrA che contene l'indirizzo di mememoria 
    // della variabile altezza
    int* ptr = &altezza; 
    
    printf("%d\n", altezza);  // output -> 30
    printf("%p\n", &altezza); // output -> indirizzo di memoria di altezza (0x7ffe5367e044)
    printf("%p\n", ptr);      // output -> indirizzo di memoria di altezza (0x7ffe5367e044)
    printf("%d\n", *ptr);     // output -> valore di altezza (30)

Puntatori e Array

In C, un array è una collezione di elementi dello stesso tipo memorizzati in locazioni di memoria contigue. Quando si utilizza il nome dell’array in un’espressione, esso viene automaticamente convertito in un puntatore al primo elemento dell’array.

Esempio:

int numeri[] = {10, 20, 30, 40, 50};
    
    printf("%p\n", numeri);     // indirizzo del primo elemento dell’array
    printf("%p\n", &numeri[0]); // stesso indirizzo del primo elemento
    printf("%d\n", *numeri);    // valore del primo elemento (10)

In questo esempio:

Puoi anche accedere agli altri elementi usando l’aritmetica dei puntatori:

printf("%d\n", *(numeri + 1)); // output -> 20
    printf("%d\n", *(numeri + 2)); // output -> 30

Accesso agli elementi con il puntatore:

int* ptr = numeri;
    
    printf("%d\n", *(ptr + 3)); // output -> 40

Puntatori e Cicli

Spesso si usano i puntatori per scorrere un array:

int numeri[] = {1, 2, 3, 4, 5};
    int* ptr = numeri;
    
    for (int i = 0; i < 5; i++) {
        printf("%d ", *(ptr + i));
    }
    // Output: 1 2 3 4 5

Oppure si può usare il puntatore direttamente nel ciclo:

int* end = numeri + 5;
    
    for (int* p = numeri; p < end; p++) {
        printf("%d ", *p);
    }

Puntatori e Funzioni

Puoi passare un array a una funzione come puntatore:

void stampaArray(int* arr, int lunghezza) {
        for (int i = 0; i < lunghezza; i++) {
            printf("%d ", arr[i]);
        }
    }
    
    int main() {
        int dati[] = {100, 200, 300};
        stampaArray(dati, 3);
        return 0;
    }
    

Esercizi

Codegrind - Formazione digitale a 360°
Corsi di programmazione e risorse pratiche per diventare uno sviluppatore web professionista.
https://www.codegrind.it/esercizi/c/pointer