개요
프로그래밍 언어 : C언어
과제 수행 날짜 : 2020.10.30
과제 개요 : call by value와 call by reference
Call by Value
#include <stdio.h>
void swap(int p, int q)
{
int tmp;
tmp = p; p = q; q = tmp;
}
int main()
{
int i = 3, j = 5;
swap(i,j);
printf("%d, %d",i,j);
}
call by value 방식에서는 swap 함수로 main 함수의 값을 변경할 수 없다. 왜냐하면 swap 함수에서 인수로 받는 변수가 복사본이기 때문이다. 즉, 인수로 변수의 "값"만 전달하였기 때문에 원본인 변수의 값을 바꿀 수 없다.

Call by Reference
#include <stdio.h>
void swap(int *p, int *q)
{
int tmp;
tmp = *p; *p = *q; *q = tmp;
}
int main()
{
int i = 3, j = 5;
swap(&i,&j);
printf("%d, %d",i,j);
}
call by reference 방식에서 swap 함수를 이용하여 main 함수의 값을 변경시킬 수 있는 이유는 swap 함수가 인수로 변수의 주소를 받기 때문이다. swap 함수는 주소를 받았으므로 그 주소에 있는 값을 변경할 수 있고, 따라서 원본의 값도 변경되기 때문에 main 함수의 값을 변경시킬 수 있다.
call by reference를 이용하기 위해서는 포인터를 사용하면 된다. 변수의 주소를 다른 함수에 넘겨주면 그 함수에서는 포인터를 이용하여 원본 변수의 값을 변경할 수 있다.

'프로젝트 & 과제 > 3학년' 카테고리의 다른 글
[C언어] 포인터로 값 복사 (0) | 2022.02.06 |
---|---|
[C언어] 포인터로 문자열 복사 (0) | 2022.02.05 |
[C언어] char 포인터로 배열 읽기 (0) | 2022.02.03 |
[C언어] 포인터로 배열 수정 (0) | 2022.02.02 |
[C언어] 입력 문자 빈도수 계산 (0) | 2022.01.31 |