[C] Funzione per calcolo elementi di un array

Messaggioda desterix95 » 20/06/2017, 11:25

Buongiorno, ho scritto questa funzione per il calcolo del numero degli elementi di un array, volevo sapere se può essere corretta:
Codice:
#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.
desterix95
Junior Member
Junior Member
 
Messaggio: 55 di 222
Iscritto il: 10/07/2015, 14:37

Re: [C] Funzione per calcolo elementi di un array

Messaggioda jonnino2004 » 20/06/2017, 12:00

ciao

prova a fare
a[4] = {1,2,3,4}
Test di intelligenza gratuito con calcolo del QI http://www.quizandcoffee.com/Test-di-intelligenza
jonnino2004
Starting Member
Starting Member
 
Messaggio: 2 di 8
Iscritto il: 20/06/2017, 11:35

Re: [C] Funzione per calcolo elementi di un array

Messaggioda desterix95 » 20/06/2017, 13:53

Si ma se è una funzione, A[] deve essere generico, non posso assegnare dei valori precisi
desterix95
Junior Member
Junior Member
 
Messaggio: 56 di 222
Iscritto il: 10/07/2015, 14:37

Re: [C] Funzione per calcolo elementi di un array

Messaggioda apatriarca » 20/06/2017, 14:12

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4680 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C] Funzione per calcolo elementi di un array

Messaggioda desterix95 » 20/06/2017, 15:33

Giusto ho capito. Quindi questa qua potrebbe andare bene?
Codice:
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
desterix95
Junior Member
Junior Member
 
Messaggio: 57 di 222
Iscritto il: 10/07/2015, 14:37

Re: [C] Funzione per calcolo elementi di un array

Messaggioda apatriarca » 20/06/2017, 16:04

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4681 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C] Funzione per calcolo elementi di un array

Messaggioda desterix95 » 20/06/2017, 16:31

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ò?
desterix95
Junior Member
Junior Member
 
Messaggio: 58 di 222
Iscritto il: 10/07/2015, 14:37

Re: [C] Funzione per calcolo elementi di un array

Messaggioda apatriarca » 20/06/2017, 16:31

No.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4683 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite