#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;
}