#include <iostream>
using namespace std;
void doExchangeByValue(int param1, int param2)
{//CASE. call-by-value
int tmp = param2;
param2 = param1;
param1 = tmp;
cout << "doExchangeByValue, param1=" << param1 << ", param2=" << param2 << endl;
}
void doExchangeByRef(int ¶m1, int ¶m2)
{//CASE. call-by-reference
int tmp = param2;
param2 = param1;
param1 = tmp;
cout << "doExchangeByRef, param1=" << param1 << ", param2=" << param2 << endl;
}
void doExchangeOther(int *param1, int *param2)
{//CASE. doExchangeByRef 동작을 포인터 기반 처리
int tmp = *param2;
*param2 = *param1;
*param1 = tmp;
cout << "doExchangeOther, param1=" << *param1 << ", param2=" << *param2 << endl;
}
int main()
{
int arg1 = 2023;
int arg2 = 8;
cout << "(defore)doExchange arg1=" << arg1 << ", arg2=" << arg2 << endl;
doExchangeByValue(arg1, arg2);
cout << "(after)doExchange arg1=" << arg1 << ", arg2=" << arg2 << endl;
cout << "------------------------------" << endl;
cout << "(defore)doExchangeByRef arg1=" << arg1 << ", arg2=" << arg2 << endl;
doExchangeByRef(arg1, arg2);//
cout << "(after)doExchangeByRef arg1=" << arg1 << ", arg2=" << arg2 << endl;
cout << "------------------------------" << endl;
cout << "(defore)doExchangeOther arg1=" << arg1 << ", arg2=" << arg2 << endl;
doExchangeOther(&arg1, &arg2);//
cout << "(after)doExchangeOther arg1=" << arg1 << ", arg2=" << arg2 << endl;
return 0;
}