Friday, May 04, 2007
C언어] 변수 값 서로 교환, 스왑 함수; Swap Function
두 변수의 값을 서로 교환하여 바꾸는 함수 예제입니다. 예를 들어
x = 20
y = 70
일 때
x = 70
y = 20
이렇게 변경하는 것입니다. 그냥 보통의 방법으로는 swap 함수를 만들 수 없기에, 포인터를 사용합니다.
변수의 주소를 함수의 인수로 전달해야 합니다. 단순히 값을 전달하면 함수 밖의 원래의 변수의 값이 변경되지 않습니다.
소스 파일명: example.cpp
이것은 일반 변수의 주소를, 포인터 변수에 대입한 후, 그 포인터 변수를 스왑함수에 넣었습니다. 결과는 위의 소스와 같습니다.
C++ 에서: ▶▶ C++, 두 변수의 값 교환 함수 swap(); 참조에 의한 호출(Call by Reference)
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;
}
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;
}
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++)
<< Home