//----------------------------------------------------------------------------------
//항 목 | 포인터 | 참조자 | 비 고
//----------------------------------------------------------------------------------
//Null 값 | 허용 |허용안함 | int *p; // 가능
// | | | int &r; // 불가능
//----------------------------------------------------------------------------------
//주소값 재 대입 | 허용 |허용안함 | p=&a // 포인터 p에 변수 a의 주소 대입 (가능)
// | | | r=&a // a의 주소안의 값이 참조자 r 에 대입될 뿐이다.
//----------------------------------------------------------------------------------
//융통성 | 많음 | 없음 |
//----------------------------------------------------------------------------------
//사용법 | 어려움 | 쉬움 | int Kor;
// | | | int & rKor=kor;
// | | | cin >> rKor;
// | | | cout << rKor ; // 초기 선언만 & rKor로 사용되고
// | | | 그 뒤로는 rKor이 독립적인 일반 변수처럼 사용됨.
//----------------------------------------------------------------------------------
//〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
// [ 참조자 ]
//〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
//───────────────────────────────
// 함수의 호출
//───────────────────────────────
#include "stdafx.h"
#include <iostream>
using namespace std;
void swap(int x, int y){ // call by value
int temp = x;
x = y;
y = temp;
}
void swap2(int* x, int* y){ // call by pointer
int temp = *x;
*x = *y;
*y = temp;
}
void swap3(int& x, int& y){ // call by refrence
int temp = x;
x = y;
y = temp;
}
void main(){
int a = 10, b = 20;
cout << "call by value일 때 " << endl;
swap(a, b); // 바뀌지 않음 call by value
cout << a << endl;
cout << b << endl;
cout << "포인터일때 swap" << endl;
swap2(&a, &b); // 바뀐다. call by pointer
cout << a << endl;
cout << b << endl;
cout << "참조일때 swap" << endl;
swap3(a, b); // 바뀐다. call by reference
cout << a << endl;
cout << b << endl;
}