본문 바로가기
컴퓨터/C, C++

[C언어] 메인 함수 밖에서 두 변수 값 변경하기(swap함수 이용)

by 도도새 도 2021. 11. 21.

두 값 바꾸기

 

오늘은 C언어에서 두 값을 바꾸는 방법을 정리하도록 하겠습니다. 이것을 위해 첫번째는 메인 함수 내에 있는 두 값을 바꾸어 볼 것입니다. 그리고 메인 함수 밖에서 두 값을 바꾸어 보도록 하겠습니다.

 

1. 메인 함수 내에서 두 값 변경

메인 함수 내에서 두 값을 변경하는 방법은 무척 간단합니다. 임시로 값을 저장해줄 temp변수를 선언하여 값을 처리하면 되기 때문입니다.

 

예시 코드.

#include <stdio.h> 

int main(void){
	int first = 0;
	int second = 1;
	int temp;
	//first와 second값을 바꿀 것입니다.
	
	printf("Befor swap : %d, %d\n\n", first, second);
	
	temp = first;
	first = second;
	second = temp;
	
	printf("After swap : %d, %d", first, second); 
	
	
	return 0;
}

출력 결과

두 값 바꾸기

여기서 굳이 temp이라는 변수를 사용하는 이유는, 만약 second값을 first에 바로 넣으면, 다음 second에 first값을 넣을 수 없기 때문입니다. 왜냐하면 first값은 second와 같은 값이 대입되어있기 때문이지요.

 

2. 메인 함수 밖에서 두 값 바꾸기

 

이제 swap함수를 만들어 볼 차례입니다. swap함수는 포인터를 이용 할 것인데, C언어에서 포인터란 메모리의 주소값을 저장하는 변수라고 할 수 있습니다. 즉, 값이 저장되어있는 메모리를 직접 제어한다고 볼 수 있습니다.

 

이렇게 포인터를 이용하려는 이유는, 지역변수는 한 지역 내(중괄호에 의해 만들어지는 영역)에서만 사용 가능하기 때문입니다. 즉, main내에서 만들어진 지역 변수는 그 함수 밖에 나가서 제어가 불가합니다. 우리는 swap이라는 main함수 바깥에서 main함수 내의 변수를 제어하려 하므로 포인터를 이용합니다.

 

예시 코드.

#include <stdio.h> 

void swap(int* first, int*second);

int main(void){
	int first = 0;
	int second = 1;
	int temp;

	
	printf("Befor swap : %d, %d\n\n", first, second);
	
	swap(&first, &second);
	
	printf("After swap : %d, %d", first, second); 
	
	
	return 0;
}

void swap(int* first, int*second){
	int temp;
	temp = *first;
	*first = *second;
	*second = temp; 
};

출력 결과

swap함수 이용 값 바꾸기

출력 결과를 보다시피 위에서 작성한 코드처럼 두 값이 바뀐 것을 확인할 수 있습니다. 

 

포인터가 무엇인가에 대해서, 혹은 포인터에 대한 공부는 아래 사이트를 참조하면 될 것 같습니다.

https://dojang.io/mod/page/view.php?id=274

댓글