카테고리 없음

[C language] SAWP - 심화 3단 sawp

어디선가 굴러온 돌 2022. 8. 31. 01:52

전 글에서 sawp에 관해 알아보았다.
보충을 하자면 sawp 함수를 따로 만들 때 포인터를 이용해야 하는 이유는 그냥  main 함수에 변수값을 받아와서
sawp이 이루어졌을 때 main 함수에 변수값 자체는 변하지 않기 때문이다  즉,

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

함수를 이렇게 짜게 되면 main 함수에는 sawp된 값이 반영이 안된다는 것이다.
만약 이런 sawp 함수를 이용하여 sawp을 진행하고 mian 함수에서 출력을 해보면
sawp이 이루어지지 않은 채 출력될 것이다. 

이는 보충 글이고

 

이번 글에서는 두 변수의 sawp이 아닌 세 변수의 sawp을 진행해 볼 것이다.

이 sawp에서는 num1, num2, num3을 main 함수에서 넘겨받아 num1의 값을 num2로 num2의 값을 num3으로 num3의 값을 num1로 sawp해줄것이다.

#include <stdio.h>
void SAWP(int* a, int* b, int* c) {
	//result = 5 9 1
	int temp;
	temp = *a;
	
	*a = *c; //c의 값이 a로
	*c = *b; b의 값이 c로
	*b = temp; //tempd의 값 즉, a의 값이 b로
}
int main()
{
	int num1 = 9, num2 = 1, num3 = 5;
	SAWP(&num1, &num2, &num3);
	printf("%d %d %d", num1, num2, num3);

	return 0;
}

sawp해줄 세 변수의 주소값을 받을 포인터 변수를 세 인자로 받고, SAWP함수 내에 temp라는 지역 변수를 선언하여 이용해 준다.

여기서 temp의 역할은 *a를 잠시 보관할 임시 저장소 정도이다.

이후 sawp을 차례대로 진행해 주면 된다.

 

SAWP함수의 인자로 &num1, &num2, &num3을 넣어준 이유는 sawp해줄 변수의 주소 값을 SAWP함수의 인자로 보내주기 위함이다.