[Risolto] [c] trovare il numero di elementi in un array

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Carlit0sway+
Prode Principiante
Messaggi: 92
Iscrizione: martedì 16 dicembre 2008, 17:26

[Risolto] [c] trovare il numero di elementi in un array

Messaggio da Carlit0sway+ »

Io ho un array di interi.
Non conosco la sua dimensione.

Per accedervi so che posso fare:

Codice: Seleziona tutto

int *a;
sizeof(a)/sizeof(a[0]) 
Ecco, allora il mio problema sta nel fatto che: se faccio ciò in un main, la dimensione è giusta. Se faccio ciò in una funzione implementata in un file .c, il cui header includo poi nel main, allora questa dimensione è sbagliata.

Mi spiego meglio con due righe di codice (su grande consiglio di crisixk  :))

Codice: Seleziona tutto

#include <stdio.h>
#include "arrays.h"

int main(void){	
	int a[] = { 0, 3, 7, 2 };
	printf("%d\n",sizeof(a)/sizeof(a[0]) );
	printArray( a );    /* PrintArray sarebbe una comoda funzione che mi serve per stampare un array */
	return 0;
}
Stampa giustamente 4 come dimensione. Poi stampa 0??? Non mi stampa l'array

arrays.c:

Codice: Seleziona tutto

void printArray( int *arr ){
	int i;
	printf("%d\n",sizeof(arr)/sizeof(int) );  /* Flag che ho messo per controllare la correttezza della dimensione dell'array */
	for( i = 0; i < (sizeof(arr)/sizeof(int)); i++ )
		printf("%d ",arr[ i ]);
	printf("\n");
}
Il flag stampa 1???
Perchè?
Ultima modifica di Carlit0sway+ il mercoledì 30 dicembre 2009, 1:52, modificato 1 volta in totale.
Avatar utente
p3t3r
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 653
Iscrizione: martedì 29 aprile 2008, 19:40

Re: [c] trovare il numero di elementi in un array

Messaggio da p3t3r »

ma daii...
alora..
semplicemente perchè la dimensione del puntatore al primo elemento dell'array (la tua variabile a) è cm quella di un intero, ovvero 4 byte, quindi se esegui il rapporto 4/4 = 1 quindi stampa 1!!!!
è questa la risp che cercavi giusto??
è un errore un pò troppo banale.. ma tu sei autodidatta?
Ultima modifica di p3t3r il martedì 29 dicembre 2009, 20:11, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c] trovare il numero di elementi in un array

Messaggio da Zoff »

Non è possibile scoprire la lunghezza di un array senza saperla a priori in C.

Il tuo codice ne è la dimostrazione...

Una volta che passi il puntatore ad un altra funzione perdi l'informazione sulla lunghezza...

È necessario quindi salvarlo e aggiornarlo man mano che si lavora con l'array e quando necessario passarlo come parametro aggiuntivo...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
tomallevi
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1746
Iscrizione: venerdì 24 ottobre 2008, 22:41

Re: [c] trovare il numero di elementi in un array

Messaggio da tomallevi »

gli array si passano per referenza cioè si passa un puntatore al primo elemento. UN PUNTATORE. non tutto l'array.

sizeof(a)  <- spazio di un puntatore a int cioè 4 bytes
sizeof(a[0]) <- primo elemento che è un intero, quindi  4bytes

4/4 =1
;D  ;)  :P

per rimediare devi fare così

void printArray(int len, int arr[len])
{
    .....
}
Avatar utente
p3t3r
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 653
Iscrizione: martedì 29 aprile 2008, 19:40

Re: [c] trovare il numero di elementi in un array

Messaggio da p3t3r »

il problema di origine è quello segnalato da Zoff
.. in particolare quando si dichiara un array, nel tuo caso, specifichi già una dimensione (4):
...
prova a spiegare bene qual'è il tuo obbiettivo.
Carlit0sway+
Prode Principiante
Messaggi: 92
Iscrizione: martedì 16 dicembre 2008, 17:26

Re: [c] trovare il numero di elementi in un array

Messaggio da Carlit0sway+ »

Ah ho capito!

Allora, Il mio problema sta nello stampare un array di interi, ma non conoscendo a priori la sua dimensione. E' possibile?
tomallevi
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1746
Iscrizione: venerdì 24 ottobre 2008, 22:41

Re: [c] trovare il numero di elementi in un array

Messaggio da tomallevi »

è possibile o se hai un preciso numero che fa da terminatore di array oppure passandoci come parametro la lunghezza. diversamente la vedo grigia!!  ;D
Carlit0sway+
Prode Principiante
Messaggi: 92
Iscrizione: martedì 16 dicembre 2008, 17:26

[Risolto] Re: [c] trovare il numero di elementi in un array

Messaggio da Carlit0sway+ »

Grazie! ho risolto :)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti