[C언어] SWAP()함수
[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 <stdio.h>
#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 <stdio.h>
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로 작성했네요.
짱짱맨 호출에 응답하였습니다.
방문해 주셔서 감사해요.
Congratulations @codingman! You received a personal award!
Thank you for taking part in the early access of Drugwars.
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!