C언어 함수에서는 값을 오직 1개만 반환할 수 있다.
●일반적인 함수 반환 코드 예제
#include <stdio.h>
int two() // 반환값이 int형인 two 함수 정의
{
return 4,2,3; // 4,2,3을 반환(?)
}
int main()
{
int num1;
num1 = two(); // int형을 반환했으므로 int형 변수에 저장 <---3만반환!
printf("%d\n", num1); // 3
return 0;
}
▲위의 코드 예제에서 보듯 함수는 무조건 1개만 반환한다.
여러 개를 반환하는 방법이 1가지가 있는데 바로 포인터 매개변수를 활용하는 것이다. 사실 그 방법도 return을 여러 개 하는 것이 아니라, 여러 개 하는 것처럼 보이게 하는 것일 뿐이다. 이와 관련한 내용이 궁금하다면, 페이지 하단의 링크를 참조하길 바란다.
예전에 구조체에 대해 이야기한 적이 있다. 구조체 안에는 여러 가지 정보들이 담겨 있다. 그렇다면 구조체 자체를 return 해주면 그 안에 있는 값들도 모두 return 되는 것이니 함수에서 여러 개를 return 할 수 있는 것이 아닐까? (구조체 개념은 밑에 링크 달아놓음)
●구조체 반환 코드 예제
#include <stdio.h>
struct score {
int math; //구조체 score 의 멤버 math 선언
int english; //구조체 score 의 멤버 english 선언
};
struct score getScore()
{
struct score s; //구조체 score을 s 변수로 선언
s.math = 87; //structure s의 math 멤버에 87 대입
s.english = 76; // structure s의 english 멤버에 87 대입
return s ; // 구조체 변수 반환
}
int main()
{
struct score s1;
s1 = getScore(); //구조체의 반환 값이 s1에 들어감
printf("math score : %d\n", s1.math); //87
printf("english score : %d\n", s1.english); //76
return 0;
}
struct score getScore()
▲구조체를 반환하는 함수를 정의하려면 위의 코드처럼 struct + 구조체 이름 + 함수 이름()으로 써야 한다.
int main()
{
struct score s1;
▲아까 분명히 struct score s;라고 선언해주었고, s.math = 87; 등을 통해 이미 값이 들어있으니 s1에도 이미 값이 들어가 있는 것 아닐까? 어차피 struct score 엔 값이 이미 들어있으니까 s1나 s로 부르든 값이 똑같이 있는 거 아닌가? 근데 왜 getscore()로 값을 반환해주지?라는 생각이 들 수 도있다.
▼밑의 사진처럼 생각할 수 있다는 것이다.
하지만 구조체는 어떤 틀을 제공하는 것이지 s, s1 등으로 변수를 선언해준다고 해서 그 틀 자체 안에 값이 제공되는 것이 아니다. 그 틀을 복사한 구조체를 s라는 변수로 지정해주는 것이다.
▼코드를 그림으로 설명하면 다음과 같다
●구조체 변수 선언 상태
●구조체 s에 값 넣고 s1에 return 하는 과정
●s1에 값이 return 된 이후의 상황
▲ s는 함수 안에 있는 것이므로 함수가 끝나면 구조체의 변수도 사라짐. 영구적으로 있는 것이 아님 (값을 return 하고 사라지는 느낌)
'프로그래밍 언어 > C' 카테고리의 다른 글
백준 15552번 해설 (0) | 2021.08.11 |
---|---|
visual studio 에서 C언어 개발 환경 구축하는 법 (0) | 2021.08.10 |
C언어 34강) void 포인터 개념 및 void 포인터 반환 (2) | 2020.11.22 |
C언어 33강)+ 함수에서 문자열 포인터 반환 (0) | 2020.11.21 |
C언어 18강)+ 포인터 변수 선언 (0) | 2020.11.21 |