Call By Value & Call By Reference
함수로 인자를 전달하는 방식에는 크게 Call by value와 Call by reference 방식이 있다.
Call By Value (값에 의한 호출)
함수 호출 시 인자로 전달되는 변수의 값을 함수의 매개변수에 복사하여 전달하는 방식
복사된 인자는 지역 변수의 특성을 가지게 된다. → 매개변수의 값을 변경해도 원래의 변수에는 영향 X
⇒ 원본 값을 바꿀 필요가 없을 때 사용
#include <stdio.h>
void sub(int a)
{
a = a - 3;
printf("sub 함수의 매개변수 a의 값 : %d\\n", a);
}
int main()
{
int a = 10;
printf("sub 함수 실행 전 a 값 : %d\\n", a);
minus(a);
printf("sub 함수 실행 후 a 값 : %d", a);
}
출력 결과
출력 결과에서 알 수 있다시피, 메인 함수에서 선언하고 할당한 a의 값은 sub함수를 실행하기 전이나 후나 바뀌지 않는다.
Call By Reference (참조에 의한 호출)
함수 호출 시 인자의 값으로 주소값을 전달하는 방식
C에서는 Call by reference를 지원하지 않는다.
따라서 인자의 값으로 주소값을 전달하기는 하지만 그 주소값도 매개변수에 복사해서 전달한다. (이를 Call by address 방식이라고 한다.)
#include <stdio.h>
void sub(int *a) // 전달된 주소값에 들어있는 값
{
*a = *a - 3;
printf("sub 함수의 매개변수 a의 값 : %d\\n", *a);
}
int main()
{
int a = 10;
printf("sub 함수 실행 전 a 값 : %d\\n", a);
sub(&a); // 주소값을 매개 변수로 전달
printf("sub 함수 실행 후 a 값 : %d", a);
}
출력 결과
이렇게 주소값을 직접 전달해 줌으로써 메인 함수가 아닌 다른 함수에서 값을 변경하면 원본도 바뀌게 된다.
'Programming Language > C' 카테고리의 다른 글
[C언어] 동적 할당 : malloc() (0) | 2023.09.12 |
---|---|
[C언어] 백준 10818번 : 최소, 최대 (0) | 2023.09.12 |
C 포인터(Pointer) (1) | 2023.06.07 |
백준 2480번 : 주사위 세개 (0) | 2022.06.23 |
C언어 멘토링 | 6주차 [과제] | 백준 2675번, 1157번 (0) | 2022.06.01 |