14-1 Call-by-reference & Call-by-value
문제1
변수 num에 저장된 값의 제곱을 계산하는 함수를 정의하고, 이르 호출하는 main 함수를 작성해보자. 단, 여기서는 다음 두 가지 형태로 함수를 정의
- Call-by-value기반의 SquareByValue 함수
- Call-by-reference기반의 SquareByReference 함수
SquareByValue 함수는 인자로 전달된 값의 제곱을 반환해야 하며, SquareByreference함수는 정수가 저장되어 있는 변수의 주소 값을 인자로 받아서 해당 변수에 저장된 값의 제곱을 그 변수에 다시 저장해야 한다.
#include <stdio.h>
int SquareByValue(int num);//Call-by-value기반의 SquareByValue 함수
int SquareByReference(int *Rnum);// Call-by-reference기반의 SquareByReference 함수
int main()
{
int Vnum = 2;
int Rnum = 3;
printf("SquareByValue : %d\n", SquareByValue(Vnum));
SquareByReference(&Rnum);
printf("SquareByReference : %d", Rnum);
return 0;
}
int SquareByValue(int num) {
num = num * num;
return num; //매개변수로 받은 값을 곱해서 리턴값으로
}
int SquareByReference(int *Rnum)
{
*Rnum = (*Rnum) * (*Rnum);
//매개변수로 주소를 받아 그 위치의 값 변경
}
문제2
세 변수에 저장된 값을 서로 뒤바꾸는 함수를 정의해보자. 예를 들어서 함수의 이름이 Swap3라하면, 다음의 형태로 함수가 호출되어야 한다.
Swap3(&num1, &num2, &num3);
그리고 함수 호출의 결과로 num1에 저장된 값은 num2에, num2에 저장된 값은 num3에, 그리고 num3에 저장된 값은 num1에 자장되어야 한다.
#include <stdio.h>
void Swap(int *num1, int* num2, int *num3);
int main()
{
int num1 = 10, num2 = 20, num3 = 30;
Swap(&num1, &num2, &num3);
printf("N1 : %d\nN2 : %d\nN3 : %d", num1, num2, num3);
return 0;
}
void Swap(int* num1, int* num2, int* num3){
int temp = *num1;
*num1 = *num3;
*num3 = *num2;
*num2 = temp;
}
'언어공부 > C언어' 카테고리의 다른 글
(Chapter14)포인터와 함수에 대한 이해 (0) | 2021.02.14 |
---|---|
(Chapter 13) 포인터와 배열! 함계 이해하기 예제 (0) | 2021.02.14 |
(Chapter13)포인터와 배열! 함께 이해하기 (0) | 2021.02.14 |
(Chapter12) 포인터의 이해 (0) | 2021.02.13 |
(Chapter 11) 1차원 배열 예제 (0) | 2021.02.09 |