본문 바로가기
Study (etc)/C

[함수]세 변수에 저장된 값 바꾸기

by Haren 2019. 2. 3.

오랜만의 C언어 포스팅이다.

공부는 꾸준하게 하고 있기는 한데, '이걸 블로그에 올려도 되나?' 로 고민하다가 고민할 바에 그냥 하나라도 더 기록하자는 마음에

작성하고자 한다.


포인터를 이용하여 함수 호출 방식 중 'Call-by-reference'를 이용한 함수 예제를 풀어보았다.

윤성우 저 '열혈 C 프로그래밍' 교재에 있는 문제 중 하나이다.


사실 C언어에는 'Call-by-reference'가 존재하지 않는다는 내용의 글을 어디선가 주워 읽은 적이 있다.

그 글 덕분에 이 부분을 공부하며 머릿속이 굉장히 복잡해졌다. 

분명히 파라미터에서 주소값을 반환하는 & 연산자가 들어갈 뿐 아니라 함수 내에서도 주소값 참조 연산자인 *도 들어가지 않는가.

이쯤 되면 참조에 의한 호출도 맞지 않을까? 하는 고민이 든다.


혹시 이 부분에 대해 확실히 아시는 분들께서는 부디 도움을 주시기를 간절히 희망한다...(희망합니다...)



▶문제

  세 변수에 저장된 값을 서로 뒤바꾸는 함수를 정의해보자. 예를 들어서 함수의 이름이 Swap3라 하면, 다음의 형태로 함수가 호출되어야 한다.

  Swap3(&num1, &num2, &num3);


  그리고 함수호출의 결과로 num1에 저장된 값은 num2에, num2에 저장된 값은 num3에, 그리고 num3에 저장된 값은 num1에 저장되어야 한다.



나는 다른 Swap 관련 함수 혹은 프로그램 예제 소스에서 본 것처럼 temp라는 임시변수를 만들어서 하나를 저장시켜 해결했다.



소스코드

#include <stdio.h>

void Swap3(int *num1, int *num2, int *num3)
{
	int temp = *num2;
	*num2 = *num1;
	*num1 = *num3;
	*num3 = temp;
}

int main()
{
	int num1 = 10;
	int num2 = 20;
	int num3 = 30;

	printf("num1, num2, num3 : %d %d %d \n", num1, num2, num3);

	Swap3(&num1, &num2, &num3);

	printf("**After Swap3**\n");
	printf("nun1, num2, num3 : %d %d %d \n", num1, num2, num3);

	return 0;
}