컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Friday, May 04, 2007

C언어] 변수 값 서로 교환, 스왑 함수; Swap Function


두 변수의 값을 서로 교환하여 바꾸는 함수 예제입니다. 예를 들어

x = 20
y = 70

일 때

x = 70
y = 20

이렇게 변경하는 것입니다. 그냥 보통의 방법으로는 swap 함수를 만들 수 없기에, 포인터를 사용합니다.

변수의 주소를 함수의 인수로 전달해야 합니다. 단순히 값을 전달하면 함수 밖의 원래의 변수의 값이 변경되지 않습니다.

변수 값 바꾸기 예제


소스 파일명: example.cpp
#include <stdio.h>

void swap(int* a, int* b);


int main(void) {
  int i = 300;
  int j = 500;

  printf("i = %d\n", i);
  printf("j = %d\n", j);
  // i = 300
  // j = 500


  // 변수 i, j 의 주소를 "주소 연산자 (&)" 를 이용하여 swap 함수로 전달
  // i, j 가 포인터 변수가 아니기에, &를 붙여야 주소를 알 수 있음
  swap(&i, &j);

  printf("i = %d\n", i);
  printf("j = %d\n", j);
  // i = 500
  // j = 300
  // 두 변수의 값이 교환되었습니다.

  return 0;
}


// 변수의 값이 아닌, 변수의 주소를 요구하는 함수임
void swap(int* a, int* b) { // 여기의 별표는, 포인터 변수라는 뜻
  int temp = *a; // a가 가리키는 곳의 값(300)을 temp에 대입
  *a = *b; // *a 등에 붙은 별표는, 포인터 변수가 가리키는 값을 의미함
  *b = temp;
}





이것은 일반 변수의 주소를, 포인터 변수에 대입한 후, 그 포인터 변수를 스왑함수에 넣었습니다. 결과는 위의 소스와 같습니다.
#include <stdio.h>

void swap(int* a, int* b);


int main(void) {
  int i = 300;
  int j = 500;

  int* ip = &i; // i의 주소(&i)를, 포인터 변수 ip 에 대입
  int* jp = &j; // j의 주소(&j)를, 포인터 변수 jp 에 대입


  printf("i = %d\n", i);
  printf("j = %d\n", j);
  // i = 300
  // j = 500


  // i, j의 주소가 들어 있는, 포인터 변수 ip, jp 를 입력
  swap(ip, jp);


  printf("i = %d\n", i);
  printf("j = %d\n", j);
  // i = 500
  // j = 300
  // 두 변수의 값이 교환되었습니다.

  return 0;
}




void swap(int* a, int* b) {
  int temp = *a;
  *a = *b;
  *b = temp;
}




C++ 에서: ▶▶ C++, 두 변수의 값 교환 함수 swap(); 참조에 의한 호출(Call by Reference)




tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top