Come trovare la dimensione di una matrice intera in C.Come trovare la dimensione della matrice integer
Qualunque metodo disponibile senza muovere l'intero array volta, di scoprire la dimensione della matrice.
Come trovare la dimensione di una matrice intera in C.Come trovare la dimensione della matrice integer
Qualunque metodo disponibile senza muovere l'intero array volta, di scoprire la dimensione della matrice.
Se la matrice è una variabile globale, statica o automatica (int array[10];
), quindi sizeof(array)/sizeof(array[0])
funziona.
Se è un array assegnato dinamicamente (int* array = malloc(sizeof(int)*10);
) o passato come argomento di funzione (void f(int array[])
), non è possibile trovare le sue dimensioni in fase di esecuzione. Dovrai memorizzare la dimensione da qualche parte.
Si noti che sizeof(array)/sizeof(array[0])
compila bene anche per il secondo caso, ma produrrà silenziosamente il risultato errato.
Forse menzionare e indicare una domanda che spiega il decadimento della matrice? Argomento frequente –
Per i novizi C++ che arrivano a questa domanda C: [Tutto ciò che avreste sempre voluto sapere sugli array in C++] (http://stackoverflow.com/q/4810664/140719) in una FAQ. – sbi
http://stackoverflow.com/questions/5493281/c-sizeof-a-passed-array – delive
int len=sizeof(array)/sizeof(int);
Dovrebbe funzionare.
No - in molti casi questo * non * funzionerà. –
Funziona, tuttavia 'site_t len = sizeof (array)/sizeof (array [0]);' è un po 'migliore (cioè funziona ancora quando è stato modificato il tipo di dati degli elementi dell'array. –
@Grzegorz: mostraci come funziona per questo array: 'void f (int array []) {site_t len = sizeof (array)/sizeof (array [0]);}' – sbi
Se array è allocato statico:
size_t size = sizeof(arr)/sizeof(int);
caso di array è dinamico allocato (cumulo):
int *arr = malloc(sizeof(int) * size);
cui dimensione variabile è una dimensione del arr.
_msize(array)
in Windows o in Linux malloc_usable_size(array)
dovrebbe funzionare per la matrice dinamica
Entrambi si trovano all'interno malloc.h ed entrambi restituiscono un size_t
Sono utili, ma non molto portatili ... – glglgl
Come hai fatto a implementare questo array? In linea di principio, si conosce la dimensione dell'array in O (1) (dimensione nota), O (N) (terminata da zero) o impossibile. – kennytm
Di solito gli array vengono creati come variabili statiche e durante la sua creazione è necessario aver passato un po 'di tempo. – Jack
@Jack: Perché gli array "di solito" sono statici ??? – sbi