PDA

Visualizza la versione completa : [C++] Funzione con 2 variabili in uscita


Metflar
14-01-2008, 18:05
le funzioni ritornano un valore la tua funzione non lo fa!

shodan
14-01-2008, 18:08
e anche se lo facesse, potrebbe ritornare solo un valore, non due

MItaly
14-01-2008, 18:17
No, a meno di non "impacchettare" i due valori in una struttura.


#include <iostream>
#include <conio.h>
using namespace std;

struct intPair
{
int firstInt;
int secondInt;
};

intPair risultati (int* x, int* y);

int main(void)
{
int a, b, c, d;
intPair ip;
cout<<"inserisci il primo numero";
cin>>a;
cout<<"inserisci il secondo numero";
cin>>b;
ip = risultati (&a, &b);
cout<<ip.firstNumber<<endl;
cout<<ip.secondNumber;
getch();
}

intPair risultati (int* x, int* y)
{
intPair ip;
ip.firstNumber=*x*2;
ip.secondNumber=*y*2;
return ip;
}

shodan
14-01-2008, 18:33
Il modo pių semplice č di usare le variabili in ingresso per i valori di uscita. (come fa la swap() )


void risultati (int* x, int* y){
*x=*x*2;
*y=*y*2;
}

int a=1, b=2;
risultati (&a, &b);
// a = 2, b = 4


Soluzione pių elegante (e C++)


void risultati (int& x, int& y){
x=x*2;
y=y*2;
}

int a=1, b=2;
risultati (a, b);
// a = 2, b = 4

XWolverineX
14-01-2008, 19:54
* per il puntatore
& per l'indirizzo della variabile che stai usando o per dare un riferimento (in una funzione)

Ricapitolando i metodi sono 2:

O metti il tutto in una struttura (suggerito da MItaly) o ti fai passare come puntatore i valori che vuoi ritornare.

GreyFox86
15-01-2008, 10:33
Originariamente inviato da T. VERCETTI
ok, grazie, avrei una domanda, cm e quando si usano "*" e "&"?

Quando vuoi fare una funzione con parametri di output, cerca di non usare il passaggio per riferimento, perchč dando una rapida occhiata al codice del chiamante non ci si accorge (o ci ci si dimentica) del fatto che alcuni parametri possano essere modificati, mentre con il passaggio per indirizzo tutto risulta pių chiaro. (vedi gli esempi di shodan).
Insomma, usa il passaggio per riferimento solo se risulta estremamente chiaro che quelle variabili vengono modificate dalla funzione.

Loading