컴퓨터공부/C & C++ & STL

포인터와 참조자

achivenKakao 2007. 10. 1. 19:48

//----------------------------------------------------------------------------------
//항 목               | 포인터 | 참조자  | 비 고
//----------------------------------------------------------------------------------
//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;
}