ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 참조에 의한 전달
    Visual Studio/C 기초 2013. 7. 4. 23:58

    일단, 참조에 의한 전달이라는 말의 뜻이 생소한 분들이 있을텐데요, 보통 함수에 인수를 전달하는 기본적인 방법은 "값에 의한 전달" 입니다.

    우리가 short, int, long, float 등등 변수를 선언하고 변수의 값을 선언하여 printf로 호출하는 걸 값에 의한 전달이라고 합니다. 그렇다면 참조에 의한 전달이란 무엇일까요?

    변수 자체의 값을 전달하는 것이 아니라 인수로 사용되는 변수에 대한 포인터를 전달하는 것입니다. 프로그램에서 큰 구조체를 사용한다면 값에 의한 전달로 배열을 전달하는 것은 불가능합니다. 이유는 스택 영역이 부족하게 되기 때문입니다. 참조에 의한 전달이 함수에 배열을 전달하는 유일한 방법입니다.

    예제를 들겠습니다.

     

     #include <stdio.h>

    void value(int x, int y, int z);
    void ref(int *x, int *y, int *z);

    main(){
     int x=1, y=2, z=3;

     printf("value()함수를 호출하기 전 : x=%d, y=%d, z=%d\n",x,y,z);
     value(x,y,z);
     printf("value()함수를 호출한 후 : x=%d, y=%d, z=%d\n",x,y,z);
     ref(&x,&y,&z);
     printf("ref()함수를 호출한 후 : x=%d, y=%d, z=%d\n",x,y,z);
    }

    void value(int x, int y, int z)
    {
     x=0;
     y=0;
     z=0;
    }
    void ref(int *x, int *y, int *z)
    {
     *x=0;
     *y=0;
     *z=0;
    }

     

    일단 임의의 함수 value()함수를 생성하고, 값에 의한 전달을 이용해 x y z의 값을 변경하려 했으나 바뀌지 않고 원래 x y z의 값인 1 2 3 이 나왔습니다. 그런데 ref()함수를 생성하고, 참조에 의한 전달을 이용했더니 x y z의 값이 변해버렸습니다.

    value()함수와 ref()함수의 차이점이 뭔가 하면

    value()함수는 변수에 직접 0을 할당합니다. 하지만 ref()함수는 포인터를 사용하기 때문에 간접 사용을 통해 변수에 0을 할당하는 것이죠.

    참조에 의한 전달은 변수의 값을 변경할 수 있다는 것이 장점입니다. 하나 이상의 인수를 전달하면 함수에서 호출한 프로그램으로 하나 이상의 값을 돌려주는 것이 가능해집니다.

    참조에 의한 전달로 전달되는 인수를 함수에서 사용하기 위해 간접 연산자(*)를 사용하시면 됩니다.



    'Visual Studio > C 기초' 카테고리의 다른 글

    C언어 가변적인 함수 va_list, va_start(), va_arg(), va_end()  (6) 2013.08.19
    C언어 void형 포인터  (0) 2013.08.17
    strlwr() strupr()  (0) 2013.07.04
    strstr()  (2) 2013.07.04
    C언어 문자열 비교 strspn()  (0) 2013.07.03

    댓글

Designed by Tistory.