CS

포인터 기초: Swap함수

Junly_21 2021. 9. 21. 21:45

포인터에 대한 이해를 위해 Swap함수를 직접 구현해보았다.

 

처음 함수만을 배운 이후 정수 a와 b의 값을 함수를 통해 바꾸고 싶을때 생각대로 되지 않는다.

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int swap(int num1, int num2);
int main()
{
	int a = 10;
	int b = 20;
	
	printf("Swap 전 a: %d, b: %d\n", a, b);

	swap(a, b);

	printf("Swap 후 a: %d, b: %d\n", a, b);

	return 0;
}

swap(int x, int y)
{
	int temp = x;
	x = y;
	y = temp;
    printf("Swap 함수 내부 a: %d, b: %d\n", x, y);
}

swap이라는 함수로 temp값을 사용해 x와 y를 바꿔주려고 했지만 결과는

Swap 함수 내부에서만 잠깐 바뀌고 main으로 그 값을 리턴해주지는 않는다.

 

쉬운 이해를 위해 간략히 예시를 들면

 

a와 b는 1번지에 저장된 10, 2번지에 저장된 20이라는 값에 이름표만 붙여준거다.

 

이걸 swap함수에 가져가봤자

 

8번지에 있는 x에 10을 주고, 9번지에 있는 y에 20을 넣어준 다음 8 9번지 애들끼리 이름표만 교환하고

 

main에서 printf는 다시 1번지와 2번지를 출력하는 느낌인 것이다.

 

printf는 a와 b 자체를 알아서 뚝딱뚝딱 출력하는게 아니라 a라는 이름의 1번지의 값과 b라는 이름의 2번지의 값을 출력하는것뿐.

 

해서 1번지와 2번지 자체를 바꿔주려면 포인터를 이용해 메모리주소를 바꿔준다.

int swap(int* num1, int* num2);
int main()
{	
	int a = 10;
	int b = 20;
	printf("Swap 전 a: %d, b: %d\n", a, b);

	swap(&a, &b);

	printf("Swap 후 a: %d, b: %d\n",a, b);

	return 0;
}

int swap(int* x, int* y)
{
	
	int temp = *x;
	*x = *y;
	*y = temp;

	printf("swap 함수 내부___ x: %d, y: %d\n", *x, *y);

}

기본적으로 메모리의 주소값에 신경쓰며 코드를 생각해야한다