[C] Funzione per calcolo elementi di un array
Buongiorno, ho scritto questa funzione per il calcolo del numero degli elementi di un array, volevo sapere se può essere corretta:
Non riesco a capire perchè non possa andare bene. Come risultato dalla $text(printf)$ mi torna $1$ e dovrebbe essere $4$.
Anche se aumento o diminuisco il numero di elementi mi viene restituito sempre $1$. Come mai?
Grazie.
#include <stdio.h> int Funzione(int A[] ) { int N = sizeof(A) / sizeof(A[0]); //N=numero di elementi, calcolato come dimensione array/dimensione singolo elemento, tanto sono tutti dello stesso tipo return N; }; main() { int B[]= {3,2,4,6}; int j; //numero elementi array B j = Funzione(B); printf("%d\n",j); }
Non riesco a capire perchè non possa andare bene. Come risultato dalla $text(printf)$ mi torna $1$ e dovrebbe essere $4$.
Anche se aumento o diminuisco il numero di elementi mi viene restituito sempre $1$. Come mai?
Grazie.
Risposte
ciao
prova a fare
a[4] = {1,2,3,4}
prova a fare
a[4] = {1,2,3,4}
Si ma se è una funzione, A[] deve essere generico, non posso assegnare dei valori precisi
La formula da te usata per calcolare la dimensione è valida solo nel caso in cui la dimensione sia conosciuta a tempo di compilazione. Non è questo il caso in quanto la tua funzione può essere chiamata numerose volte, con array di dimensioni diverse. Quando un array viene passato ad una funzione diventa equivalente ad un puntatore. La tua espressione ha quindi valore size(A) / sizeof(A[0]) = 8/4 = 2 (assumendo dimensioni di 8 e 4 byte per puntatori e interi). L'unico modo per ottenere la dimensione di un array passato ad una funzione è quello di avere questa dimensione come argomento.
Giusto ho capito. Quindi questa qua potrebbe andare bene?
Però eseguendo con visual studio non torna neanche questa e non capisco come mai
int Funzione(int *A) { int *ptr; int numElementi; int i=0; numElementi = 0; ptr = A; while (ptr != NULL) { ptr = A[i]; i++; numElementi++; } return numElementi; }; main() { int B[] = {2,3,4,5}; int j; //numero elementi array B j = Funzione(B); printf("%d\n", j); }
Però eseguendo con visual studio non torna neanche questa e non capisco come mai
No, puoi fare qualcosa del genere solo usando un valore che ne segna la fine. In questo caso non hai alcun valore con questo scopo. Come ti ho detto, non puoi calcolare la lunghezza di un array passato ad una funzione. La lunghezza va passata come argomento ogni volta che una funzione ha bisogno di avere la dimensione.
Ok. E quindi come calcolo una funzione che mi restituisce il numero di elementi di un array? Non esiste una funzione che mi permette di fare ciò?
No.