Menu
Coddy logo textTech

Elementi degli array e puntatori

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 8 di 63.

Ora che hai capito come i nomi degli array funzionano da puntatori, puoi usare questa conoscenza per accedere agli elementi di un array in un modo completamente diverso. Invece di usare la nota notazione con le parentesi quadre, come array[i], puoi usare la notazione con i puntatori per ottenere lo stesso risultato.

L'intuizione chiave è che array[i] è esattamente equivalente a *(array + i). Quando scrivi array + i, stai dicendo a C di spostarsi in avanti di i posizioni dall'inizio dell'array. L'operatore di dereferenziazione * ottiene quindi il valore in quella posizione.

int numbers[5] = {10, 20, 30, 40, 50};
// Queste due righe fanno esattamente la stessa cosa:
printf("%d", numbers[2]);    // Stampa 30
printf("%d", *(numbers + 2)); // Stampa anche 30

Questa notazione con i puntatori funziona perché C calcola automaticamente l’indirizzo di memoria corretto in base alle dimensioni del tipo di dati. Quando aggiungi 2 a un puntatore a un array di interi, C avanza di 2 × sizeof(int) byte, arrivando esattamente al terzo elemento.

Comprendere questa equivalenza ti dà flessibilità nel lavorare con gli array e ti prepara a tecniche con i puntatori più avanzate, che incontrerai man mano che continuerai a imparare C.

challenge icon

Sfida

Facile

Scrivi un programma in C che dimostri come accedere agli elementi di un array usando la notazione con puntatori invece della tradizionale indicizzazione degli array. Il tuo programma dovrebbe:

  1. Dichiarare un array di interi chiamato values con 6 elementi e inizializzarlo con i valori {5, 15, 25, 35, 45, 55}
  2. Usare un ciclo for per scorrere tutti gli elementi dell'array
  3. All'interno del ciclo, usare la notazione con puntatori *(values + i) per accedere a ciascun elemento (non usare la notazione con parentesi quadre come values[i])
  4. Stampare ciascun elemento usando il metodo di accesso con la notazione con puntatori
  5. Dopo il ciclo, dimostrare l'equivalenza stampando il terzo elemento (indice 2) usando entrambi i metodi:
    • Prima usando la notazione con puntatori: *(values + 2)
    • Poi usando la notazione tradizionale degli array: values[2]

Il tuo output dovrebbe mostrare i risultati nel seguente formato:

Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25

Questa sfida verifica la tua comprensione dell'equivalenza tra array[i] e *(array + i), dimostrando come l'aritmetica dei puntatori consenta di accedere agli elementi di un array usando calcoli degli indirizzi di memoria invece della tradizionale indicizzazione.

Provalo tu

#include <stdio.h>

int main() {
    // TODO: Scrivi il tuo codice qui
    // Dichiara e inizializza l'array 'values' con 6 elementi
    // Usa un ciclo for per stampare ogni elemento con la notazione dei puntatori *(values + i)
    // Dopo il ciclo, stampa il terzo elemento usando sia la notazione dei puntatori sia quella degli array
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online