천간 avatar

[C언어] SWAP()함수

codingman

Published: 12 Mar 2019 › Updated: 12 Mar 2019[C언어] SWAP()함수

[C언어] SWAP()함수

[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

Leave [C언어] SWAP()함수 to:

Written by

나는 소망한다 내게 주어진 모든것들을

Read more #kr-dev posts


Best Posts From 천간

We have not curated any of codingman's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From 천간