C 언어 개열/C 언어

Call by Value 와 Call by Address

본클라쓰 2010. 8. 22. 09:56

 

 함수를 호출하여 매개변수로 값을 전달할 때 Call by Value 와 Call by Address 형식 두 가지를 사용할 수 있다. Call by Value 는 값의 복사를 통해 매개변수로 값을 전달하는 것이고, Call by Address는 변수의 주소값을 전달하여 저장되어 있는 데이터의 변경이 가능한 매개변수 전달 방법이다.


 


1. Call by Value


 호출함수의 매개변수의 값을 복사하여 정의함수의 매개변수로 전달하는 것이다. 전달받은 매개변수의 값을 수정 또는 조작해도 실 매개변수에는 어떠한 영향도 미치지 않는다. 값의 의한 전달 방식을 사용할 경우, 함수 내의 코드는 그 함수를 호출할 때 사용한 실매개변수의 내용을 변경할 수 없다는 것을 의미한다.


#include <stdio.h>

void fun(int a) {
    a += 10;
    printf("전달받은 값 출력 : %d \n", a);
}

int main(void) {

    int a = 10;

    fun(a);

    printf("전달후 값 출력 : %d \n", a);

    return 0;
}


[output result]
전달받은 값 출력 : 20
전달후 값 출력 : 10




2. Call by Address


 함수 호출의 실매개변수의 주소(address)가 정의함수의 매개변수로 복사되는 것이다. 정의함수에서 호출시 사용된 실매개변수의 내용이 있는 주소에 접근하여 값을 수정 또는 조작하기 위한 방법이다. 값의 의한 전달과는 달리 매개변수의 값에 어떤 수정 또는 조작의 결과가 실매개변수의 내용에 영향을 미친다. 주소를 전달하기 위해 주소를 이용해 매개변수를 전달하고 정의함수(형식매개변수)에서는 포인터 변수로 값에 접근하는 방법이다. 상호 전달된 매개변수의 주소에 의해서 이 주소의 기억장소의 내용은 서로 공유되는 것이다.


#include <stdio.h>

void fun(int *a) {
    *a += 10;
    printf("전달받은 값 출력 : %d \n", *a);
}

int main(void) {

    int a = 10;

    fun(&a);

    printf("전달후 값 출력 : %d \n", a);

    return 0;
}

[output result]
전달받은 값 출력 : 20
전달후 값 출력 : 20



'C 언어 개열 > C 언어' 카테고리의 다른 글

입출력  (0) 2010.08.22
선행처리기(Preprocessor)  (0) 2010.08.22
구조체(Structure)  (0) 2010.08.22
포인터(Pointer) 변수  (0) 2010.08.21
register 변수  (0) 2010.08.21