-----------------[TROVARE IL NUMERO DI ELEMENTI IN UN ARRAY]-----------------

Autore: cH!cus
eMail: thechicus@gmail.com
web: http://thechicus.nigx.net

=====================
TROVARE IL NUMERO DI
ELEMENTI DI UN ARRAY
=====================

Nella programmazione avvolte capita di dover sapere di quanti elementi è formato un array. In alcuni casi tramite cicli for o while si potrebbe risalire al numero di elementi, ma in confronto a quello che sto per proporvi sarebbe una cosa un pochino più complicata. Ecco il codice di esempio...

-----------------------------------code--------------------------------------
#include <stdio.h>

#define NumElementi(array) (sizeof(array)/sizeof(array[0]))

int main() {
   int Numeri[] = {2, 4, 6, 8, 9, 2, 12, 56, 78, 21};
  
   printf("Numero di elementi dell'array: %d", NumElementi(Numeri));
   return 0;
}
-----------------------------------end---------------------------------------

Adesso ve lo spiego. Guardate la seconda riga di codice. #define è una direttiva del preprocessore (la potremmo chiamare anche macroistruzione) che, durante la compilazione del codice, non fa altro che sostituire nel nostro caso NumElementi(array) ad ogni sua occorrenza con l'espressione accanto, ovvero sizeof(array)/sizeof(array[0])). Ma la domanda che vi sarete chiesti è come fa a sapere di quanti elementi è fatto l'array che gli abbiamo passato. Bene... guardate l'espressione che sostituisce NumElementi(array). Innanzi tutto è importante capire che gli elementi di un array sono tutti del tipo con cui è stato dichiarato l'array, nel nostro caso int (16 bit). Nell'espressione compare anche l'operatore unario sizeof, che non fa altro che restituire la dimensione in memoria dell'oggetto operando. Detto questo, l'espressione non fa altro che dividere la dimensione totale dall'array (ovvero la somma della memoria utilizzata da tutti i suoi elementi che sono tutti di tipo int) per la dimensione di un elemento dell'array (nel nostro caso array[0]), e cosi ritorna il numero di elementi. Facile, no?


Per chiarimenti contattatemi,
ciaoO!