#include <iostream>
using namespace std;
void swap1(int a, int b){ // passing by value
int c = a;
a = b;
b = c;
}
void swap2(int* a, int* b){ // pointer method (requires passing memory address (&var) instead of var)
int c = *a; // store value at a into c
*a = *b; // assign b's value to a's value
*b = c; // assign c to b's value
}
void swap3(int& a, int& b){ // pass by reference
int c = a;
a = b;
b = c;
}
int main(){
int a = 5;
int b = 3;
swap1(a, b); // doesn't swap
cout << "a=" << a << ", b=" << b << endl;
swap2(&a, &b); // swaps with pointers
cout << "a=" << a << ", b=" << b << endl;
swap3(a, b); // swaps with references
cout << "a=" << a << ", b=" << b << endl;
int* ra = &a;
int* rb = &b;
int y = *ra;
(*ra)++;
y = *ra;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgc3dhcDEoaW50IGEsIGludCBiKXsJLy8gcGFzc2luZyBieSB2YWx1ZQoJaW50IGMgPSBhOwoJYSA9IGI7CgliID0gYzsKfQoKdm9pZCBzd2FwMihpbnQqIGEsIGludCogYil7CS8vIHBvaW50ZXIgbWV0aG9kIChyZXF1aXJlcyBwYXNzaW5nIG1lbW9yeSBhZGRyZXNzICgmdmFyKSBpbnN0ZWFkIG9mIHZhcikKCWludCBjID0gKmE7CQkvLyBzdG9yZSB2YWx1ZSBhdCBhIGludG8gYwoJKmEgPSAqYjsJCS8vIGFzc2lnbiBiJ3MgdmFsdWUgdG8gYSdzIHZhbHVlCgkqYiA9IGM7CQkJLy8gYXNzaWduIGMgdG8gYidzIHZhbHVlCn0KCnZvaWQgc3dhcDMoaW50JiBhLCBpbnQmIGIpewkvLyBwYXNzIGJ5IHJlZmVyZW5jZQoJaW50IGMgPSBhOwoJYSA9IGI7CgliID0gYzsKfQoKaW50IG1haW4oKXsKCWludCBhID0gNTsKCWludCBiID0gMzsKCXN3YXAxKGEsIGIpOwkJLy8gZG9lc24ndCBzd2FwCgljb3V0IDw8ICJhPSIgPDwgYSA8PCAiLCBiPSIgPDwgYiA8PCBlbmRsOwoKCXN3YXAyKCZhLCAmYik7CQkvLyBzd2FwcyB3aXRoIHBvaW50ZXJzCgljb3V0IDw8ICJhPSIgPDwgYSA8PCAiLCBiPSIgPDwgYiA8PCBlbmRsOwoKCXN3YXAzKGEsIGIpOwkJLy8gc3dhcHMgd2l0aCByZWZlcmVuY2VzCgljb3V0IDw8ICJhPSIgPDwgYSA8PCAiLCBiPSIgPDwgYiA8PCBlbmRsOwoKCWludCogcmEgPSAmYTsKCWludCogcmIgPSAmYjsKCWludCB5ID0gKnJhOwoJKCpyYSkrKzsKCXkgPSAqcmE7CgoJcmV0dXJuIDA7Cn0=