Dipende. Se si tratta di un array allocato dinamicamente, cioè, lo hai creato chiamando malloc, poi come altri suggeriscono che devi salvare la dimensione della matrice/numero di elementi da qualche parte o avere una sentinella (una struct con un valore speciale, che sarà la l'ultimo).
Se si tratta di un array statico, è possibile ridimensionare le dimensioni/le dimensioni di un elemento. Per esempio:
int array[10], array_size;
...
array_size = sizeof(array)/sizeof(int);
Si noti che, a meno che sia globale, questo funziona solo nel campo di applicazione in cui si inizializza la matrice, perché se passato ad un'altra funzione si arriva decaduto a un puntatore.
Spero che aiuti.
+1 Di solito uso i puntatori alle strutture in modo da essere sicuro che 'NULL' è una sentinella univoca. –
Penso che seguire il modello a stringa con terminazione nulla sia una cattiva idea – hasen
@hasen j: Sono d'accordo, a meno che tu non sappia che devi sempre ripetere l'intero array ogni volta, nel qual caso una sentinella può chiarire leggermente il codice. Il problema con la sentinella è che si può finire con il comportamento di O (N) dove O (1) avrebbe fatto, e non sempre lo si comprende. – quark