Funzione semplice non funzionante

di il
2 risposte

Funzione semplice non funzionante

Ciao, sono relativamente un principiante (informatica di terza superiore-liceo)
Non capisco come mai la mia funzione non funzioni (scusate il gioco di parole). Qualcuno può aiutarmi, spiegandomi in modo semplice le cause di ciò ed eventualmente le soluzioni?

#include <iostream>
#include <string>
using namespace std;
	void scambio(int a, int b)
	{
	int vartemp=a;
	a=b;
	b=vartemp;
	}
int main()
{
	int x,y;
	cout<<"Inserisci A: "<<endl;
	cin>>x;
	cout<<"Inserisci B: "<<endl;
	cin>>y;
	scambio(x,y);
	cout<<"Adesso, A equivale a: "<<x<<endl;
	cout<<"Adesso, B equivale a: "<<y<<endl;
	return 0;
}

2 Risposte

  • Re: Funzione semplice non funzionante

    1) passaggio parametri per VALORE
    2) passaggio parametri per REFERENCE (questo e' piu' C++)
    3) passaggio parametri per REFERENCE usando i PUNTATORI (questo e' classico C)

    E come dice Kuiil in "The Mandalorian":

    Ho parlato!

  • Re: Funzione semplice non funzionante

    Ciao Nico,

    attento a come gli passi i parametri.
    Ti mando il codice corretto per semplificarti il lavoro ma cerca di capire bene la differenza fra passaggio per valore o per reference come dice @migliorabile.
    #include <iostream>
    using namespace std;
    
    void scambio(int &a, int &b) \\OCCHIO
    {
    	int vartemp;
    	vartemp=a;
    	a=b;
    	b=vartemp;
    }
    
    int main()
    {
    	int x,y;
    	cout<<"Inserisci A: "<<endl;
    	cin>>x;
    	cout<<"Inserisci B: "<<endl;
    	cin>>y;
    	scambio(x, y);
    	cout<<"Adesso, A equivale a: "<<x<<endl;
    	cout<<"Adesso, B equivale a: "<<y<<endl;
    	return 0;
    }
    come vedi ho scritto (int &a, int &b), in questo modo passo anche il riferimento.

    Un altro modo di farlo sarebbe così:
    #include <iostream>
    using namespace std;
    
    void scambio(int *a, int *b) \\NB
    {
    	int vartemp;
    	vartemp= *a;
    	*a= *b;
    	*b=vartemp;
    }
    
    int main()
    {
    	int x,y;
    	cout<<"Inserisci A: "<<endl;
    	cin>>x;
    	cout<<"Inserisci B: "<<endl;
    	cin>>y;
    	scambio(&x, &y); \\NB
    	cout<<"Adesso, A equivale a: "<<x<<endl;
    	cout<<"Adesso, B equivale a: "<<y<<endl;
    	return 0;
    }
    qui vado ad usare l'asterisco per entrare e accedere al contenuto, mentre uso la & per passare il riferimento.
Devi accedere o registrarti per scrivere nel forum
2 risposte