프로그래밍 언어/C

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

happy_life 2020. 11. 17. 20:40

abcdefgh123123.tistory.com/38

 

C언어 12강 사용자 정의 함수

함수(function) ●정의:프로그램에서 특정한 작업을 수행하도록 따로 정의해 놓은 독립적인 프로그램의 단위 ●목적: 1) 특정 작업을 함수로 처리하여, 반복을 줄이기 위해서 2) 구조적 프로그램으

abcdefgh123123.tistory.com

▲return으로 반환되는 함수의 값은 오직 하나이다. 그렇다면 여러 개의 값을 반환하려면 어떻게 해야 할까?  

 

return 값은 하나이다. 또 그 값은 함수 내에서만 사용가능하다. 하지만 포인터를 사용해 주소를 역참 조해서 값을 아예 바꿔버린다면?? 함수 밖에서도 바뀐 여러 개의 값들을 사용할 수 있지 않을까?? 

먼저 매개변수에서 일반적인 변수를 사용하는 코드예제를 보자.

참고로 C언어는 call by value (값만 전달) 을 기본으로 한다.

abcdefgh123123.tistory.com/47

 

C언어 14강 매개변수 전달방법 1. Call by value(값에 의한 호출)

값에 의한 호출은 실 매개변수의 값만 형식 매개변수에 전달되기 때문에 호출되는 함수는 형식 매게변수만 조작할 수 있고, 실 매개변수에는 직접 접근 할 수 없다. 코드를 보며 직관적으로 이

abcdefgh123123.tistory.com

 

●일반변수 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을 여러개하는 것은 아님)

 

 

call by value

 

C언어 14강 매개변수 전달방법 1. Call by value(값에 의한 호출)

값에 의한 호출은 실 매개변수의 값만 형식 매개변수에 전달되기 때문에 호출되는 함수는 형식 매게변수만 조작할 수 있고, 실 매개변수에는 직접 접근 할 수 없다. 코드를 보며 직관적으로 이

abcdefgh123123.tistory.com

 

call by reference

 

C언어 15강 매개변수 전달방법 2.call by reference(참조에 의한 호출)

참조에 의한 호출은 실 매개변수의 주소 값을 호출되는 함수의 형식 매개변수에 전달하는 방식. 실 매개변수와 형식 매개변수가 동일한 메모리 공간 주소를 사용하므로, 형식 매개변수의 값이

abcdefgh123123.tistory.com