본문 바로가기
프로그래밍/C

[C언어] 포인터를 이용한 swap 함수 구현

by 아임코딩 2024. 4. 29.
728x90
반응형

안녕하세요 아임코딩입니다.

이번에는 C언어 함수에 대한 내용과 swap 함수에 대해서 알아보도록 하겠습니다.

함수란 특정 기능을 하는 코드들의 집합입니다.

단순하게 생각하면 단지 코드 여러줄을 모아 이름을 붙여놓은 것입니다.

 

main 함수에 int 형 변수 a와 b가 있을 때

우선 함수를 사용하지 않고 이 두 변수의 값을 바꿔보도록 하겠습니다.

#include <stdio.h>

void main()
{
	int a = 1, b = 2;
	printf("swap을 호출하기 전: a = %d, b = %d\n", a, b);

	int tmp;
	tmp = a;
	a = b;
	b = tmp;

	printf("swap을 호출한 다음: a = %d, b = %d\n", a, b);
}

두 변수의 값을 바꾸기 위해서는 새로운 변수를 하나 만들어서 (tmp)

tmp 안에 a를 먼저 저장한 후 (tmp = a)

a에 b를 저장하고, (a = b)

b에는 tmp를 저장합니다. (b = tmp)

 

위의 코드를 함수로 바꿔보도록 하겠습니다.

#include <stdio.h>

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

void main()
{
	int a = 1, b = 2;
	printf("swap을 호출하기 전: a = %d, b = %d\n", a, b);

	swap(a, b);

	printf("swap을 호출한 다음: a = %d, b = %d\n", a, b);
}

위의 코드를 실행해도 a와 b의 값은 변하지 않는데요, 그 이유는

void swap(int a, int b) 에서 작성한 int a, int b (매개변수) 는

함수가 실행될 때 변수가 만들어지고, 함수가 종료되면 사라지기 때문입니다.

main() 함수에 있는 변수 a, b 와 swap() 함수에 있는 변수 a, b는 다른 변수입니다.

 

따라서 main() 함수 안에 있는 변수 a와 b의 값을 변경하기 위해서는 포인터를 이용해야합니다.4

#include <stdio.h>

void swap(int* pa, int* pb)
{
	int tmp;
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}

void main()
{
	int a = 1, b = 2;
	printf("swap을 호출하기 전: a = %d, b = %d\n", a, b);

	swap(&a, &b);

	printf("swap을 호출한 다음: a = %d, b = %d\n", a, b);
}

 

포인터를 이용하면 주소값을 함수의 매개변수로 (pa, pb) 로 넘겨줄 수 있기 때문에

main() 함수에 있는 변수의 값들을 변경할 수 있습니다.

 

이렇게 포인터를 이용하면 swap() 함수를 구현할 수 있습니다.

728x90
반응형