반응형

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;
}

 

반응형

+ Recent posts