Skip to content

Instantly share code, notes, and snippets.

@meditans
Created June 29, 2016 06:50
Show Gist options
  • Save meditans/269662ac4f0bad3a9f5684176515acc5 to your computer and use it in GitHub Desktop.
Save meditans/269662ac4f0bad3a9f5684176515acc5 to your computer and use it in GitHub Desktop.
#include<iostream>
using namespace std;
void raddoppiaByReference(int &m)
{
m=2*m;
}
int raddoppiaByValue(int m)
{
return 2*m;
}
int main()
{
// q è un intero
int q = 3;
// r è un puntatore ad intero, inizializzato con l'indirizzo di q. Ricorda che
// nelle definizioni, "int *ptr" vuol dire che ptr è puntatore ad un intero,
// mentre nelle espressioni, "*ptr" indica il valore della variabile a cui
// punta ptr.
int *r = &q;
// s è un alias, ovvero un altro nome per q, e ne condivide anche l'indirizzo
// (cambiando s cambia q). Ricorda che nelle definizioni, "int &s" vuol dire
// che s è un altro nome per una variabile di tipo int, mentre nelle
// espressioni, "&q" vuol dire l'indirizzo di q.
int &s = q;
// Qui di seguito metto i valori stampati, una volta usando il sinonimo e
// l'altra usando la deferenziazione del puntatore. Stampa 3 3
cout << s << " " << *r << endl;
// Stampa ancora 3
cout << q << endl;
// Questo non stampa niente, ma raddoppia la q del main (perché è passata by
// reference)
raddoppiaByReference(q);
// Quindi questo adesso stampa 6
cout << q << endl;
// Infine, il valore di ritorno di raddoppiaByValue è 12, perché è il doppio di 6 (ma q
// non viene modificata, perché è pass by value). Stampa 12
cout << raddoppiaByValue(q) << endl;
// Qui q vale ancora 6, e lo stampo
cout << q << endl;
// Incremento s, che è un sinonimo per parlare di q
s++;
// Adesso questo stampa 7
cout << q << endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment