본문 바로가기

공부/프로그래밍

[C++] 스왑 함수 로직


temp = x;

x = y;

y = temp;   


논리 자체는 간단하다. 서로 값을 가지고 있는 x,y의 값을 바꾸기 위해서

x를 일단 또다른 변수에 저장해놓고 x에 y값을 대입하고 y값에 x값을 저장해둔 또다른 변수를 대입하는 것이다.


포인터와 레퍼런스에서 스왑은 예로 많이 들어가는데 차이점을 보자.


일반


int swap( int x, int y)

{

int temp;

temp = x;

x = y;

y = temp;   

}


포인터

int swap( int *x, int *y)

{

int temp;

temp = *x;

*x = *y;

*y = temp;   

}


레퍼런스

int swap( int &x, int &y)

{

int temp;

temp = x;

x = y;

y = temp;   

}


일반과 포인터/레퍼런스 스왑의 차이점은 일반 함수로 매개변수를 받고 스왑해도 그 스왑은

해당 함수 안에서만 일어나는 지역 스왑이지 함수를 호출한 main 함수에서는 값이 바뀌지 않는다.

그러나 포인터를 쓰거나 레퍼런스를 쓰면 main에서도 값이 바뀌어 스왑되게 된다.


매개변수는 값을 복사해와 쓰는데 포인터나 레퍼런스를 쓴 매개변수는 복사가 아닌 그 변수 자체를 전달받아 쓴다고 생각하면 된다.

728x90