[C]Passaggio array a funzione.[RISOLTO]

di il
3 risposte

[C]Passaggio array a funzione.[RISOLTO]

In questo semplice programma (l'ho scritto solo per fare un esempio e capire l'errore) passo alla funzione un array che viene riempito e poi stampato dalla funzione, quando lo stesso array però viene stampato dal main i valori sono sballati come se avesse "perso la traccia" di dove si trova l'array.
Sto sbagliando qualcosa nel passaggio quello lo so, come posso risolvere? (vorrei passare l'array senza return ma direttamente per indirizzo).

#include <stdio.h>
#define MAX 5
void riempi_array(int *array);
int main(int argc, char * argv[]){
	int arr[MAX], i;
	riempi_array(&arr[MAX]);
	for(i=0; i<MAX; i++)
		printf("%d ", arr[i]);
	return 0;
}
void riempi_array(int *array){
	int i;
	for(i=0; i<MAX; i++)
		array[i]=i;
	for(i=0; i<MAX; i++)
		printf("%d ", array[i]);
}
Grazie in anticipo

3 Risposte

  • Re: [C]Passaggio array a funzione.[RISOLTO]

    L'errore sta in

    riempi_array(&arr[MAX]);

    che dovrebbe essere

    riempi_array(arr);
  • Re: [C]Passaggio array a funzione.[RISOLTO]

    oregon ha scritto:


    L'errore sta in

    riempi_array(&arr[MAX]);

    che dovrebbe essere

    riempi_array(arr);
    Che errore stupido , ho perso 2 ore dietro un esercizio da 100 righe di codice per questa cavolata .
    Grazie mille per la rapidità.
  • Re: [C]Passaggio array a funzione.[RISOLTO]

    Perchè tu gli passi l'indirizzo di memoria di un elemento dell'array che manco dovrebbe esistere e quindi ti mette numeri a caso (gli passi l'indirizzo dell'elemento con indice 5 dell'array).

    Ad una funzione generica il vettore si passa per indirizzo.
    Per definizione &vettore[0] e vettore sono la stessa cosa. Dare l'indirizzo del primo elemento del vettore o nome del vettore indica l'indirizzo del vettore.
    Quindi per semplicità basta il nome del vettore.
Devi accedere o registrarti per scrivere nel forum
3 risposte