Menu
Coddy logo textTech

I nomi degli array come puntatori

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

Gli array e i puntatori in C hanno una relazione speciale, fondamentale per capire come C gestisce i dati in memoria. Quando dichiari un array, il nome dell'array stesso funge da puntatore costante al primo elemento dell'array.

Questo significa che quando hai un array come int numbers[5];, il nome numbers è essenzialmente un puntatore che punta sempre a numbers[0]. Puoi pensare al nome dell'array come a un puntatore integrato che non devi dichiarare separatamente.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' punta al primo elemento
// numbers == &numbers[0]  // Queste espressioni sono equivalenti!

Questa equivalenza è fondamentale: numbers e &numbers[0] ti forniscono entrambi esattamente lo stesso indirizzo di memoria. Il nome dell’array è semplicemente un modo più pratico per fare riferimento all’indirizzo del primo elemento senza dover usare l’operatore di indirizzo.

Comprendere questa relazione apre la strada all’uso delle tecniche con i puntatori negli array, che possono rendere il tuo codice più flessibile ed efficiente. La differenza fondamentale è che, a differenza dei puntatori normali, i nomi degli array sono puntatori costanti: non puoi cambiare ciò a cui puntano.

challenge icon

Sfida

Facile

Scrivi un programma in C che dimostri l'equivalenza tra i nomi degli array e i puntatori ai loro primi elementi. Il programma dovrebbe:

  1. Dichiarare un array di interi chiamato numbers con 4 elementi e inizializzarlo con i valori {10, 20, 30, 40}
  2. Dichiarare un puntatore a intero chiamato ptr
  3. Assegnare il nome dell'array numbers al puntatore ptr
  4. Stampare l'indirizzo contenuto in numbers usando printf con lo specificatore di formato %p
  5. Stampare l'indirizzo del primo elemento &numbers[0] usando printf con lo specificatore di formato %p
  6. Stampare l'indirizzo contenuto in ptr usando printf con lo specificatore di formato %p
  7. Stampare il valore del primo elemento usando il nome dell'array: *numbers
  8. Stampare il valore del primo elemento usando il puntatore: *ptr

L'output dovrebbe mostrare i risultati nel seguente formato:

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

Questa sfida dimostra che il nome dell'array agisce come un puntatore costante al primo elemento e che numbers, &numbers[0] e ptr contengono tutti lo stesso indirizzo di memoria quando a ptr viene assegnato il nome dell'array.

Provalo tu

#include <stdio.h>

int main() {
    // TODO: Scrivi qui il tuo codice
    // 1. Dichiara e inizializza l'array 'numbers' con {10, 20, 30, 40}
    // 2. Dichiara un puntatore a un intero chiamato 'ptr'
    // 3. Assegna il nome dell'array al puntatore
    // 4. Stampa tutti gli indirizzi e i valori richiesti
    
    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