[C언어] SWAP()함수
- 웹컴파일러 : https://ideone.com/
오늘은 너무나 유명한 SWAP()함수에 대해 간단히 다루고자 합니다. 어렵지 않는 코딩이라 입문자분들이라면 한번쯤 코딩을 해봤던 함수일 것입니다. 이 코딩이 PC 폴더에 메모장에 적혀 있어서 한번 post로 작성 해봅니다.
1. SWAP() 함수
SWAP()함수는 말 그대로 두 변수의 값으로 서로 교환하는 동작을 수행 합니다. 즉, A=10, B=20이라고 가정하면 A=20, B=10으로 서로 바꾸고 싶을 때 사용합니다.
그러면 SWAP() 함수는 위 글을 코딩화 하려면 어떻게 해야 할까요. 초급 난이도 코딩으로 글의 의미만 잘 이해하고 있으면 충분히 할 수는 표현입니다.
[ 글의 의미 ]
- 두 수를 교환한다!
- 교환한다면 교환 된 수를 임시로 담을 변수가 필요하다.
위 글을 그대로 코딩화 하면 다음과 같습니다.
a = 10;
b = 20;
tmp = 0;
tmp = a;
a = 10;
b = tmp;
간단하죠. 사용자 정의함수로 SWAP()함수로 간단히 만들어 보죠.
2. 코딩
#include
#define SWAP(a, b, tmp) {tmp=a; a=b; b=tmp;}
void main(){
int a=10,b=20,tmp;
SWAP(a,b,tmp);
printf("%d, %d, %d \n", a,b,tmp);
}
우선 #define으로 정의를 통해 교환을 시키는 코딩을 하였습니다. 이 표현은 컴파일 시 해당 표현이 먼저 본문 코딩에 대입되어 컴파일 된다는 의미 입니다. 이 표현이 들어 있는 본문 코딩에 대입된다고 생각하시면 됩니다.
#define a 10
void main(){
...
c = a + a;
...
}
이렇게 표현하면 a라는 글자가 있는 본문 코딩에 컴파일 전에 10을 다 대입하고 컴파일 된다고 생각하시면 됩니다.
c = 10 + 10;
이렇게 대입 한 후 컴파일이 된다고 생각하시면 됩니다.
[결과]
교환 코딩이 정상적으로 결과를 얻었네요.
사용자 정의함수로 표현
[코딩]
#include
void swap_a(int *a,int *b){
int tmp = 0;
tmp = *a;
*a = *b;
*b = tmp;
}
void main(){
int c=10, d=20;
swap_a(&c,&d);
printf("%d, %d \n", c, d);
}
이번에는 포인트 변수를 활용하여 사용자 정의함수를 만들어 보았습니다. c, d변수의 주소지를 사용자정의함수 포인터변수에 넘겨주면 포인터 변수는 main함수 내에 있는 c, d 변수의 주소지를 가리키게 됩니다. 즉, 사용자정의 함수에 내에서 포인터 변수 값을 수정하면 main함수 내에 있는 c, d 변수의 값고 변경이 된다고 생각하시면 됩니다.
쉽게 말해서, 하나의 주소지를 c, *a가 같이 쓴다고 생각하시면 됩니다. *a의 값을 바꾸면 바꾼 값은 같은 주소지에 저장되니깐 그 주소지를 같이쓰는 c의 값도 바뀌는 것이죠.
[결과]
마무리
오늘은 간단한 SWAP()함수에 대해서 이야기 했는데 이 함수가 중요한 것이 아니라 #define 표현과 포인터변수 표현을 중점적으로 봐주시기 바랍니다. 사실 SWAP()함수는 post로 쓰기에 좀 그러고 구글 검색을 하면 너무도 많은 글들이 있기 때문에 post로 쓰기 부적절한 내용입니다. 하지만 쓴 이유는 방금 말함 #define 표현과 포인터변수를 이용한 표현의 의미를 살펴보기 좋은 주제라 생각되어 post로 작성했네요.