C :: call by value & call by reference

J·2024년 5월 23일

C언어

목록 보기
16/18
post-thumbnail

함수에서 값을 받아내는 방식
매개변수를 통해서 값을 받아내는 방식

call by reference

// 함수 구현 :: 2개의 실수 정보를 받고, 덧셉 결과값 반환
double add(double a, double b) {	// 2개의 실수 정보를, 매개변수 통해서 받도록 설정
	return a + b;
}

int main() {
	double num1, num2;
	scanf("%lf %lf", &num1, &num2);		// double 선언 후 출력에 "%f" 사용가능하지만 입력시 반드시 "%lf"로 사용해야함

	double result = add(num1, num2);		// 입력값들을 함수로 보내서 실행(실행한 뒤에는 num1 + num2	값으로 대체된다)

	printf("결과값 :: %.1f\n", result);
}

call by reference(포인터)

// 함수 구현 :: 2개의 실수 정보를 받고, 덧셉 수행
void add(double a, double b) {	// 2개의 실수 정보를, 매개변수 통해서 받도록 설정
	a += b;
}

void plus(double* a, double* b) {
	*a += *b;	
}

int main() {
	double num1, num2;
	scanf("%lf %lf", &num1, &num2);		// double 선언 후 출력에 "%f" 사용가능하지만 입력시 반드시 "%lf"로 사용해야함
	printf("현재 num1, num2 값 :: %.1f, %.1f\n", num1, num2);

	// 1. call by value(값) 기법 :: num1, num2의 값만 함수로 전달 (변수 통째로 전달 x)
	add(num1, num2);		// 입력값들을 함수로 보내서 실행(실행한 뒤에는 num1 + num2	값으로 대체된다)
							// num1 = 2.5, num2 = 6.8 일 때, add(2.5, 6.8);으로 실행됨. => 값만 전달함. 변수에 변동을 주지 않는다.

	printf("call by value의 num1 값 :: %.1f\n", num1);
	
	
	// 2. call by reference(주로) 기법 :: num1, num2의 주소값을 함수로 전달 (변수를 통째로 전달 o)
	plus(&num1, &num2);		// 변수의 주소를 함수로 보내서 실행
							// num1 = 2.5, num2 = 6.8 이라 가정하여도, add(num1 변수 자체, num2 변수 자체); 로 실행
								
	printf("call by reference의 num1 값 :: %.1f\n", num1);
}
profile
나야

0개의 댓글