Determinare la lunghezza di un array in C: i metodi migliori

La lunghezza degli array in C può essere determinata utilizzando vari metodi che consentono di semplificare la gestione dinamica degli array e di reagire alle variazioni di dimensione.

Lunghezza di un array in C

La lunghezza di un array C si riferisce al numero di elementi che contiene. Questa informazione è cruciale per accedere a elementi specifici nell’array, per attraversarlo o per effettuare manipolazioni. Quando viene dichiarato un array, la memoria per i suoi elementi viene allocata in modo continuo nella RAM. In C non esiste una funzione integrata diretta per determinare la lunghezza di un array, quindi è necessario farlo manualmente.

I metodi più comuni includono:

  • sizeof()
  • Aritmetica dei puntatori
  • Cicli

sizeof()

sizeof()fa parte degli operatori del linguaggio di programmazione C. La sua funzione è determinare la dimensione di un tipo di dati o di una variabile in byte durante la compilazione. Il valore di ritorno dell’operatore sizeof è size_t, un tipo di intero senza segno che rappresenta la dimensione in byte. L’operatore sizeof può anche essere utilizzato per calcolare la lunghezza di un array.

Sintassi

Per determinare il numero di elementi, è necessario dividere la dimensione totale dell’array per la dimensione di un singolo elemento.

data_type arrayLength = sizeof(array_name) / sizeof(array_name[index]);
c
  • data_type: si tratta del tipo di dati in cui deve essere salvata la lunghezza dell’array.
  • array_name: specifica il nome dell’array.
  • sizeof(array_name): restituisce la dimensione totale dell’array in byte.
  • sizeof(array_name[index]): restituisce il numero di elementi dell’array dividendo la dimensione totale dell’array per la dimensione di un singolo elemento.
  • index: indica l’indice di un elemento dell’array.

Esempio

Utilizziamo sizeof() in un esempio pratico per determinare la dimensione dell’array myArray e di un singolo elemento in byte, in modo da poter calcolare il numero di elementi attraverso la divisione dei risultati.

int main() {
    int myArray[] = {1, 2, 3, 4, 5};
    size_t totalSize = sizeof(myArray);
    size_t elementSize = sizeof(myArray[0]);
    size_t arrayLength = totalSize / elementSize;
    printf("Total size of the array: %d bytes\n", (int)totalSize);
    printf("Size of a single element: %d bytes\n", (int)elementSize);
    printf("Number of elements in the array: %d\n", (int)arrayLength);
    return 0;
}
c

Il risultato è il seguente:

Total size of the array: 20 bytes
Size of a single element: 4 bytes
Number of elements in the array: 5
c

Aritmetica dei puntatori

La lunghezza di un array non può essere determinata direttamente utilizzando l’aritmetica dei puntatori, poiché un puntatore da solo non contiene informazioni sulla dimensione o lunghezza dell’array associato. Tuttavia, per determinare la lunghezza dell’array è possibile utilizzare gli indirizzi dei suoi elementi.

Sintassi

data_type arr_length = *(&arr + 1) - arr;
c
  • &arr: rappresenta un puntatore a un array di elementi.
  • (&arr + 1): in questo caso, il puntatore all’array arr è incrementato di 1. Essendo arr un array, ciò significa che il puntatore punta all’array successivo dello stesso tipo.

Esempio

L’espressione *(&arr + 1) - arr calcola la differenza tra il puntatore all’array successivo &arr + 1 e il puntatore al primo elemento dell’array originale. In questo caso, l’area di memoria “successiva” corrisponde alla fine dell’array. La differenza risultante è uguale al numero di elementi nell’array.

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int length = *(&arr + 1) - arr;
    printf("Number of elements in the array: %d\n", length);
    return 0;
}
c

Il risultato è il seguente:

Number of elements in the array: 5
c

Cicli

Un ulteriore metodo per determinare la lunghezza di un array in C è quello di utilizzare un ciclo for. Questo ciclo itera attraverso l’array e conta quanti elementi esso contiene. Per fare ciò, l’array deve essere dichiarato nello stesso ambito in cui viene eseguito il codice per determinarne la lunghezza.

Esempio

In questo ciclo, il contatore arrayLength viene incrementato per ogni elemento attraversato. La condizione i < sizeof(arr) / sizeof(arr[0]) garantisce che il ciclo venga eseguito solo finché ci sono effettivamente elementi nell’array.

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
    size_t arrayLength = 0;
    for (size_t i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
        arrayLength++;
    }
    printf("Number of elements in the array: %d\n", arrayLength);
    return 0;
}
c

Si ottiene il seguente risultato:

Number of elements in the array: 8
c
Il tuo web hosting come mai prima d'ora
  • Certificato SSL e protezione DDoS
  • Velocità, flessibilità e scalabilità
  • Dominio e consulente personale
  • 1 anno gratis del gestionale di fatturazione elettronica FlexTax
Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top