▲return으로 반환되는 함수의 값은 오직 하나이다. 그렇다면 여러 개의 값을 반환하려면 어떻게 해야 할까?
return 값은 하나이다. 또 그 값은 함수 내에서만 사용가능하다. 하지만 포인터를 사용해 주소를 역참 조해서 값을 아예 바꿔버린다면?? 함수 밖에서도 바뀐 여러 개의 값들을 사용할 수 있지 않을까??
먼저 매개변수에서 일반적인 변수를 사용하는 코드예제를 보자.
참고로 C언어는 call by value (값만 전달) 을 기본으로 한다.
●일반변수 return 코드예제
#include <stdio.h>
int two() // 반환값이 int형인 two 함수 정의
{
return 4,2,3; // 4,2,3을 반환(?)
}
int main()
{
int num1;
num1 = two(); // int형을 반환했으므로 int형 변수에 저장
printf("%d\n", num1); // 3
return 0;
}
▲위의 코드에서 보듯 return 값으로 여러개를 반환할 수 없다.
return 자체로는 여러개의 값을 반환할 수 없지만, 포인터를 사용해 여러 개의 값을 반환하는 것처럼 사용할 수 있다.(call by reference로 값 자체를 바꿔주는 방식)
다음 코드예제를 보자
●포인터 매개 변수 코드예제
#include <stdio.h>
int ChangeNumber(int *a, int *b)
{
*a = 10;
*b = 20;
return 30;
}
int main()
{
int num1 = 1;
int num2 = 2;
int result = 3;
result = ChangeNumber(&num1, &num2);
printf("%d %d %d\n", num1, num2, result);
return 0;
}
원칙적으로 return 값 30하나만 반환되었지만, 함수에 대입한 num1 ,num2 의 값까지 모두 반환된 것같은 효과가 있다.
이렇게 포인터 매개 변수를 활용해 return을 여러개 하는 것처럼 보이게 할 수 있다.(진짜로 return을 여러개하는 것은 아님)
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 32강)+ 열거형(enum) switch문에 활용하기 (0) | 2020.11.18 |
---|---|
C언어 32강) 열거형 (enum) (0) | 2020.11.18 |
C언어 참고내용- 선행처리기(preprocessor)란? (0) | 2020.11.17 |
C언어 30강) 포인터 연산 사용하기 (0) | 2020.11.17 |
C언어 29강) 자료형 변환하기 (0) | 2020.11.16 |