View Full Version : funzione c++
Prometheus ts
08-01-2007, 21:38
Salve a tutti , sto sempre in fase di apprendimento , ed adesso mi chiedevo se fosse possibile per una funzione definita dall'utente restituire più di un risultato che vada al main , in particolare vorrei che una funzione restituisse un intero ed un vettore di tipo vector , è possibile? se si come e qual'è la sintassi?
Grazie mille per il vostro tempo :) ....
devi passare alla funzione ad esempio il puntatore dell'intero da modificare..un possibile prototipo potrebbe essere
vector funzione(int* intDaModificare)
jappilas
08-01-2007, 22:32
Salve a tutti , sto sempre in fase di apprendimento , ed adesso mi chiedevo se fosse possibile per una funzione definita dall'utente restituire più di un risultato che vada al main , in particolare vorrei che una funzione restituisse un intero ed un vettore di tipo vector , è possibile? se si come e qual'è la sintassi?
Grazie mille per il vostro tempo :) ....che io sappia una funzione non può avere valori di ritorno multipli e distinti...
puoi però far sì che la funzione manipoli internamente delle variabili appartenenti a (dichiarate e usate da) codice esterno al suo scope, passandogliele per riferimento
e al tempo stesso dichiarare come valore di ritorno il vettore...
Prometheus ts
09-01-2007, 10:51
GRAZIE , PER RIFERIMENTO INTENDEVI QUALCOSA DEL GENERE?
#include <iostream>
using namespace std;
void prevnext (int x, int& prev, int& next)
{
prev = x-1;
next = x+1;
}
int main ()
{
int x=100, y, z;
prevnext (x, y, z);
cout << "Previous=" << y << ", Next=" << z;
return 0;
}
jappilas
09-01-2007, 11:19
anche ;)
ma per la precisione quella è la chiamata "by reference", che non è esattamente la stessa cosa di "per riferimento"
il riferimento sarebbe un puntatore alla variabile, che la funzione dopo averlo ricevuto, dereferenzierà per operare sulla locazione di memoria puntata... riprendendo l esempio di loris ;) qualcosa del genere :
vector funzione(int* intDaModificare)
{
// dereferenzio il puntatore
// modifico il valore della cella di memoria a cui punta
* intDaModificare = ..... ;
...
return vettoreAggiornato;
}
mentre con l' operatore reference in effetti crei un alias della variabile passata
trallallero
09-01-2007, 12:59
funziona anche così ;)
ma per la precisione quella è la chiamata "by reference", che non è esattamente la stessa cosa di "per riferimento"
il riferimento sarebbe un puntatore alla variabile, che la funzione dopo averlo ricevuto, dereferenzierà per operare sulla locazione di memoria puntata... riprendendo l esempio di loris ;) qualcosa del genere :
vector funzione(int* intDaModificare)
{
// dereferenzio il puntatore
// modifico il valore della cella di memoria a cui punta
* intDaModificare = ..... ;
...
return vettoreAggiornato;
}
mentre con l' operatore reference in effetti crei un alias della variabile passata
a parte che "per riferimento" é la traduzione esatta di "by reference" :read:
poi l'unica differenza é che in una non hai un puntatore vero utilizzabile come puntatore.
Quindi se lui deve solo usare le variabili come valore di ritorno é molto meglio quella con & ;)
Piú leggibile sicuramente.
jappilas
09-01-2007, 13:17
a parte che "per riferimento" é la traduzione esatta di "by reference" :read:è vero
però su http://www.cplusplus.com/doc/tutorial/functions2.html chiama "by reference" la funzione avente le ampersand nel prototipo ... e se non ricordo male anche in thread di qualche tempo fa si era rimarcata la differenza concettuale tra "per riferimento" e "by reference" sebbene fossero una la traduzione dell' altra ( nel senso, sarò stordito , ma mi pareva di non aver inventato :O )
poi l'unica differenza é che in una non hai un puntatore vero utilizzabile come puntatore.mi pare manchi anche la copia nascosta della variabile argomento passata per valore (il puntatore cioè l' indirizzo di memoria che contiene la variabile da manipolare) :O
Quindi se lui deve solo usare le variabili come valore di ritorno é molto meglio quella con & ;)
Piú leggibile sicuramente.quello indubbiamente :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.