Passaggi di parametri per riferimento (c++)

previ91
Buongiorno ,
studio ingegneria e sono alle prime armi col c++ e con l'informatica in generale . Avrei un dubbio riguardo il passaggio dee paametri per riferimento nelle funzioni.

H capito il passaggio dei parametri per valore , qui ho un esempio :

#include
using namespace std;
int raddoppia (int n){
n=n*2;
return n;
}
int main (){
int x;
cout<<"Inserisci un numero\n";
cin>>x;
int y=raddoppia(x);
cout<<"Il numero raddoppiato e'"< system ("PAUSE");
return 0;
}

Ma l'altro non l'ho capito ; so che bisogna usare il simbolo &(and) però non ho capito molto bene la teoria. Qualcuno mi potrebbe gentilmente spiegare compe potrei usare questo tipo di passaggio nel codice che ho postato ?

Grazie :D

Risposte
apatriarca
Passando una variabile come riferimento, si permette alla funzione di cambiarne il valore. Invece che mostrarti il tuo codice te ne mostro un altro in cui è necessario usare il passaggio per riferimento. Supponi di voler scrivere una funzione che scambia i valori contenuti in due variabili, per esempio intere. Con il passaggio per valore questo è impossibile, ma usando quello per riferimento si può scrivere qualcosa come il seguente (il codice non l'ho testato ma dovrebbe essere corretto):
#include <iostream>

void swap(int& a, int& b)
{
    int t = a;
    a = b;
    b = t;
}

int main(void)
{
    int a = 5;
    int b = 3;

    std::cout << "(a, b) = (" << a << ", " << b << ")\n";
 
    swap(a, b);

    std::cout << "(a, b) = (" << a << ", " << b << ")\n";
}

ramy1989
& ha due significati, e il significato dipende dal contesto.
Se usato in un assegnamento si riferisce all' indirizzo di quella variabile.
Se usato in un' espressione si riferisce all' and logico.
Esempio:
char *p;
char a;
char b;
char c;
p=&c; // si riferisce all' indirizzo della variabile c
c=a&c; // si riferisce all' and logico, non avrebbe senso interpretarlo come un indirizzo

hamming_burst
"ramy1989":

Se usato in un' espressione si riferisce all' and logico.

attento...
&
si riferisce all'operatore bit a bit
&&
si riferisce all'and logico ${true,false}$

:-)

ramy1989
Si, ok (mi ero distratto) :smt023

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.