Ritornare array da una funzione

di il
2 risposte

Ritornare array da una funzione

Buongiorno, vorrei capire quale errore commetto nel compilare il seguente codice di test. Avrei la necessità di ritornare un puntatore ad un array da una funzione ma non mi è molto chiaro come risolvere il problema e molto probabilmente sto commettendo degli errori concettuali.

#include <cstdlib>
#include <iostream>

using namespace std;

// prototipo di funzione, passo l'array per riferimento perchè vorrei modificarne il valore nel corpo della funzione
int ritorna ( int &, int);


int main()
{
    int length = 3;
	int a[] = {0,1,2};
	int *p;
	p = ritorna(&a,length);
	print(&p,length);	

	system("PAUSE");
        return EXIT_SUCCESS;
}

/*&x è passato per riferimento e vorrebbe corrispondere all'indirizzo in memoria 
dell'array x[] di lunghezza length: x[length] */

int ritorna ( int &x, int length){
	for (int i = 0; i<length; i++){
		*(x+i)=*(x+i)+2;
	}
	return &x;
} 

//stampa l'array
void print ( int &x, int length){
	for (int i = 0; i < length; i++){
		cout << *(x+i) << " ";
	}
	cout << endl;
}

Vi ringrazio spero riusciate a chiarirmi tutti i dubbi che mi stanno saltando in mente

2 Risposte

  • Re: Ritornare array da una funzione

    L'errore che commetti è che alla funzione non passi un array per riferimento, bensì un valore 'int' per riferimento. Se vuoi passare un array ad una funzione per modificarlo, il prototipo deve essere del tipo:
    
    int* ritorna(int v[] , int n); //così
    int* ritorna(int *v , int n); //oppure così
    
    //quando usi la funzione poi il parametro va passato in questo modo
    p = ritorna(a,lenght);
    
    lo stesso vale per 'print'.
  • Re: Ritornare array da una funzione

    Ok ho sistemato, ora funziona. Grazie della spiegazione, era un problema sciocco ma non ci sarei mai arrivato
Devi accedere o registrarti per scrivere nel forum
2 risposte