Call By value 와 Call By reference

2020. 1. 21. 01:27프로그래밍/C

-Call By value : 값을 전달하는 형태의 함수 호출이다.

-Call By reference : 주소 값을 전달하는 형태의 함수호출이다.

 

1. Call By value 예제

void Swap(int n1, int n2) {

	int temp = n1;
	n1 = n2;
	n2 = temp;
	printf("Swap -> num1: %d num2: %d \n", n1, n2);
}

int main(void) {

	int num1 = 1, num2 = 2;

	printf("main -> num1: %d num2: %d \n", num1, num2);

	Swap(num1, num2);
	printf("main -> num1: %d num2: %d \n", num1, num2);

	return 0;
}

실행결과

Swap()에서 값만 받아와 내부에서만 처리하였지만 값을 넘기지 못하고있다.

 

-Call By value

장점: 원본 값이 변경되지가 않으며 안전하다.

단점: 메모리 사용이 많아진다.

 

2. Call By reference예제

void Swap(int* ptr1, int* ptr2) {

	int temp = *ptr1;
	*ptr1 = *ptr2;
	*ptr2 = temp;

}

int main(void) {

	int num1 = 1, num2 = 2;

	printf("main -> num1: %d num2: %d \n", num1, num2);

	Swap(&num1, &num2);
	printf("Swap -> num1: %d num2: %d \n", num1, num2);

	return 0;
}

실행결과

Swap함수에서 변수의 주소값을 받아 해당 변수에 직접 접근한다.

main함수에서 Swap함수가 호출되면 num1과 num2의 값이 서로 바뀐다.

 

-Call By reference

장점: 직접 참조하여 즉시 적용된다.

단점: 원본 값이 직접 참조하여 위험도가 있다.

 

'프로그래밍 > C' 카테고리의 다른 글

열혈 C프로그래밍 16-1  (0) 2020.01.29
열혈 C프로그래밍 14-1  (0) 2020.01.21
연습문제  (0) 2020.01.21
열혈 C프로그래밍 13-1  (0) 2020.01.21
열혈 C 프로그래밍 12-1  (0) 2020.01.17