728x90
반응형
Call_By_Reference
Call by value 함수와 Call by reference 함수를 구분하는 기준은 함수의 호출 방식이다.
Call by value 함수는 인자로 변수를 받아오고 Call by reference 함수는 인자로 주소값을 받아온다.
아주 간단한 차이지만 이 둘의 차이는 극명하다.
인자로 변수를 받아오면 변수를 그대로 사용하는 것이 아니라
변수를 복제하여 함수에 전달하게 되는 것이다.
그러니 함수에서 변수를 변형시키려고 아무리 노력해도 복제본만 수정될 뿐인 것이다.
그래서 우리는 함수에 주소값을 전달하는 것으로 함수 안에서도 변수에 간접적으로 접근할 수 있게 만들 수 있다.
Call By Value 방식으로 변수의 값을 증가시키려고 해보겠다.
#include <stdio.h>
void func(int a) {
a += 10;
}
int main ()
{
int num = 10;
func(num);
printf("%d", num);
return 0;
}
결과는 뻔하다.
변수가 수정되는 일은 없다.
이제 Call By Reference 방식으로 변수의 값을 증가시켜보겠다.
#include <stdio.h>
void func(int *a) {
*a += 10;
}
int main ()
{
int num = 10;
func(&num);
printf("%d", num);
return 0;
}
함수를 통해 변수를 증가시키는데 성공한 모습이다!
Call By Reference 방식을 이용하여 함수 밖의 두 변수의 값을 서로 바꾸는 것도 가능하다.
#include <stdio.h>
void swap(int *first, int *second) {
int temp;
temp = *first;
*first = *second;
*second = temp;
}
int main ()
{
int first = 1;
int second = 2;
swap(&first, &second);
printf("first : %d, second : %d", first, second);
return 0;
}
두 변수가 서로 바뀐 모습을 확인할 수 있다.
728x90
반응형
'C언어 > C언어 문법' 카테고리의 다른 글
[C언어] scanf 호출 시 &연산자를 사용하는 이유 (0) | 2024.02.18 |
---|---|
[C언어] 포인터 반환 함수 (0) | 2024.02.17 |
[C언어] 함수 포인터 배열 (0) | 2024.02.15 |
[C언어] 함수 포인터 (0) | 2024.02.14 |
[C언어] 리터럴 상수 (Literal Constant) (0) | 2024.02.13 |