참조에 의한 호출은 실 매개변수의 주소 값을 호출되는 함수의 형식 매개변수에 전달하는 방식. 실 매개변수와 형식 매개변수가 동일한 메모리 공간 주소를 사용하므로, 형식 매개변수의 값이 변경되면, 실 매개변수의 값도 변경된다.
C언어에서는 참조에 의한 호출을 사용하기 위해 포인터변수를 활용해야 한다. 포인터(*) 변수는 메모리 공간의 주소를 기억하고 있는 변수.
C언어에서는 call by value밖에 없다.따라서 참조에 의한 호출을 사용하기 위해서는 포인터 변수를 사용해야 하는 것이다.
코드 보면서 이해하자..
#include <stdio.h>
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a = 10, b= 20;
printf("\n■Call By Reference 프로그램■\n");
printf("---------------------------\n");
printf("함수 호출 전 a값,b값 : %d, %d\n\n", a,b);
printf(" >함수 호출< \n\n");
swap(&a, &b);
printf("함수 호출 후의 a값,b값: %d, %d\n\n", a,b);
return 0;
}
call by reference는 주소 값 자체를 가져온다고 하였으므로 & , * 가 사용되는 것이다.
1) temp의 메모리 주소가 3> 1로 바뀌고 거기에 있던 값 '10'까지 들어간다.
2) a의 메모리 주소가 1>2로 바뀌고 거기 있던 값 '20'까지 들어간다
3) b의 메모리 주소가 2>1(1로 바뀐 temp메모리 주소)로 거기 있던 값'10'까지 들어간다.
따라서 변수 a의 메모리 주소는 "2" 값은 "20"
변수 b의 메모리 주소는 "1"값은 "10"이므로
결괏값은 이렇게 도출된다.
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 17강 다차원 배열 (0) | 2020.11.05 |
---|---|
C언어 16강 순환 함수(재귀함수) (0) | 2020.11.03 |
C언어 14강 매개변수 전달방법 1. Call by value(값에 의한 호출) (0) | 2020.11.02 |
C언어 13강 분기문 (break 문 , continue 문, return 문) (0) | 2020.11.02 |
C언어 12강 사용자 정의 함수 (0) | 2020.11.01 |