함수를 호출하기 전에는 굳이 지역 변수를 초기화하지 않고 호출한 함수에서 전달한 값을 받아서 사용해야 하는 경우가 있습니다. 이런 경우에는 포인터 사용하여 반환형 매개 변수 전달 방식을 사용할 수 있습니다.

<코드> parameter_out.c

// parameter_out.c

#include <stdio.h>

 

void do_something(int* num)

{

    *num = 1234; // [B] 역참조로 전달된 main 함수의 변수에 저장, 반드시 초기화해야

    printf("[1] %d\n", *num); // [1] 1234

}

 

int main(void)

{

    int num; // [A] 변수를 반드시 초기화할 필요없음

 

    do_something(&num); // 반환형 매개 변수 전달 방식: 변수의 주소를 전달

 

    printf("[2] %d\n", num); // [2] 1234

 

    return 0;

}

</코드>

<실행>

[1] 1234

[2] 1234

</실행>

[A]번 코드처럼 지역 변수의 값을 초기화하지 않고 특정 함수에서 초기화하는 형태가 있습니다. 이런 경우에는 포인터 매개 변수 사용할 수가 있습니다.

[B]번 코드에서 1234로 초기화하면 역참조에 의해서 main 함수의 num 지역 변수가 1234로 초기화 됩니다.

[1]번 코드에서는 do_something 함수에서 초기화된 1234가 출력되고, [2]번 코드영역에서는 main 함수의 num 변수가 1234로 이미 초기화되었기에 1234가 출력됩니다.

포인터 매개 변수를 사용하면 어차피 특정 함수에서 초기화할 경우라면 전달할 때 초기화하지 않고 전달해도 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

감사합니다.

 

Comments


Comments are closed