[C언어] SWAP()함수

Words
315
Reading
2 min
Listen
Play
8y

[C언어] SWAP()함수



오늘은 너무나 유명한 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;

이렇게 대입 한 후 컴파일이 된다고 생각하시면 됩니다.

[결과]
교환 코딩이 정상적으로 결과를 얻었네요.
a1.jpg

사용자 정의함수로 표현


[코딩]

#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의 값도 바뀌는 것이죠.

[결과]
a2.jpg

마무리


오늘은 간단한 SWAP()함수에 대해서 이야기 했는데 이 함수가 중요한 것이 아니라 #define 표현과 포인터변수 표현을 중점적으로 봐주시기 바랍니다. 사실 SWAP()함수는 post로 쓰기에 좀 그러고 구글 검색을 하면 너무도 많은 글들이 있기 때문에 post로 쓰기 부적절한 내용입니다. 하지만 쓴 이유는 방금 말함 #define 표현과 포인터변수를 이용한 표현의 의미를 살펴보기 좋은 주제라 생각되어 post로 작성했네요.


Sponsored ( Powered by dclick )

dclick-imagead

[C언어] SWAP()함수 | Ecency