주사위의 개발일지
  • [쉽게풀어쓴C언어] 포인터 총 정리 4: 포인터와 함수(call by value, call by reference)
    2024년 02월 03일 20시 32분 42초에 업로드 된 글입니다.
    작성자: 주사위 clice
    반응형

     

    함수 호출시 인수 전달 방식

    • 값에 의한 호출 (call by value): 복사본이 전달된다
    • 참조에 의한 호출(call by reference): 원본이 전달된다

     

    c언어에서는 값에 의한 호출(call by value)만 지원한다

    값에 의한 호출을 할 경우 복사본을 가지고 코딩을 하기 때문에 원본에 영향을 줄 수 없다

     

    따라서 참조에 의한 호출(call by reference)을 하고 싶다면 포인터를 이용해 간접적으로 구현해야 한다

     

     

     

    참조에 의한 호출(call by reference)

    원본이 직접 전달된다

    이것이 포인터로 가능한 이유는 포인터를 통해 원본 값에 접근, 수정이 가능하기 때문이다

     

    #include <stdio.h>
    void swap(int *px, int *py);
    int main(void)
    {
        int a=100, b=200;
        printf("a=%d b=%d \n", a,b);
        swap(&a, &b);// 포인터를 전달한다
        printf("a=%d b=%d \n", a,b);
    
        return 0;
    }
    void swap(int *px, int* py)
    {
        int temp; //temp는 temporary(임시저장소)의 줄임말이다
        temp=*px;
        *px=*py;
        *py=temp;
    }
     

     

    결과

     

     

    scanf()함수

    지금까지 인지하지 못 했지만 항상 scanf함수를 사용할때 &를 필요로 했다

     

    예시

    int age;
    scanf(“%d”, &age);
     

     

     

     

    포인터를 사용하는 반환값

    return &a;

    이런식으로 반환할 때 포인터를 사용할 수 있다

    이때 주의할 점은 함수가 종료 되었을 때 return 하는 값이기 때문에

    함수가 종료 되었을 때 메모리에 남아있는 변수를 반환해야 한다

    따라서 지역변수를 반환값으로 하면 오류가 난다

     

     

     

     


    중간점검

    함수에 매개 변수로 변수의 복사본이 전달되는 것을 ( call by value )라고 한다

     

    함수에 매개 변수로 변수의 원본이 전달되는 것을 ( call by reference )라고 한다.

     

    배열을 함수의 매개 변수로 지정하는 경우, 배열의 복사가 일어나는가?

     

    참조의 복사가 일어난다

     

    반응형
    댓글