[C] Funzione per calcolo elementi di un array

desterix95
Buongiorno, ho scritto questa funzione per il calcolo del numero degli elementi di un array, volevo sapere se può essere corretta:
#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
jonnino2004
ciao

prova a fare
a[4] = {1,2,3,4}

desterix95
Si ma se è una funzione, A[] deve essere generico, non posso assegnare dei valori precisi

apatriarca
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.

desterix95
Giusto ho capito. Quindi questa qua potrebbe andare bene?
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

apatriarca
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.

desterix95
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ò?

apatriarca
No.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.