프로그래밍 언어/C

C언어 35강) 구조체와 구조체 포인터 반환

happy_life 2020. 11. 24. 14:22

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 하는 과정

구조체 s에 값을 넣고 score s1에 return하는 과정

 

 

 

 

s1에 값이 return 된 이후의 상황

s1에 값이 return 된 이후의 상황

 

▲ s는 함수 안에 있는 것이므로 함수가 끝나면 구조체의 변수도 사라짐.  영구적으로 있는 것이 아님 (값을 return 하고 사라지는 느낌)

 

 

구조체 개념 및 활용

 

C언어 26강) 구조체(struct) 기본개념 및 초기화

구조체의 개념  : 서로 다른 데이터 타입의 집합. (배열이 동일한 데이터 타입을 쓰는 것과는 다른 개념)  : 서로 다른 데이터 타입을 처리하지 못하는 배열의 한계를 해결하고 자료를 체계적으

abcdefgh123123.tistory.com

포인터 매개변수 활용 return 여러 개 하기

 

C언어 31강) 함수에 포인터 매개변수 활용하기 (함수 return 값 여러개 반환하는 방법)

abcdefgh123123.tistory.com/38 C언어 12강 사용자 정의 함수 함수(function) ●정의:프로그램에서 특정한 작업을 수행하도록 따로 정의해 놓은 독립적인 프로그램의 단위 ●목적: 1) 특정 작업을 함수로 처

abcdefgh123123.tistory.com