C언어

[C언어] Call by Value와 Call by Reference

코딩 메모장 2024. 11. 16. 22:03
728x90

C언어에서 함수 호출 시 **Call by Value(값에 의한 호출)**와 Call by Reference(참조에 의한 호출) 방식은 중요한 개념입니다.

 

1. Call by Value (값에 의한 호출)

정의

Call by Value는 을 함수에 전달하는 방식입니다. 이때 함수는 전달받은 변수의 복사본을 사용하므로, 함수 내부에서 매개변수를 변경하더라도 원본 변수는 영향을 받지 않습니다.

특징

  • 함수는 전달받은 값의 복사본을 사용합니다.
  • 원본 데이터를 보호할 수 있습니다.
  • 값의 복사본이 생성되므로 메모리 사용량이 늘어날 수 있습니다.

코드 예제

#include <stdio.h>

void addTen(int number) {
    number += 10; // 복사된 값이므로 원본 변수와 별개
    printf("함수 내에서의 값: %d\n", number);
}

int main() {
    int value = 5;
    addTen(value); // 값 전달
    printf("함수 호출 후의 값: %d\n", value); // value는 변하지 않음
    return 0;
}

 

출력 결과

함수 내에서의 값: 15  
함수 호출 후의 값: 5

 

2. Call by Reference (참조에 의한 호출)

정의

Call by Reference는 변수의 주소를 함수에 전달하는 방식입니다. 이때 함수는 전달받은 주소를 통해 원본 데이터에 직접 접근하므로, 함수 내부에서 값을 수정하면 원본 변수에 영향을 줍니다.

특징

  • 함수가 원본 변수의 값을 직접 변경할 수 있습니다.
  • 데이터 복사가 필요 없으므로 메모리를 효율적으로 사용할 수 있습니다.
  • 원본 데이터가 변경될 위험이 있으므로 신중히 사용해야 합니다.

코드 예제

#include <stdio.h>

void addTen(int *number) {
    *number += 10; // 주소를 통해 원본 값을 변경
}

int main() {
    int value = 5;
    addTen(&value); // 주소 전달
    printf("함수 호출 후의 값: %d\n", value); // value가 변경됨
    return 0;
}

 

출력 결과

함수 호출 후의 값: 15

 

3. Call by Value와 Call by Reference 비교

구분 Call by Value Call by Reference
전달 내용 값의 복사본 변수의 주소
원본 변수 영향 없음 있음
메모리 사용 복사본 생성으로 인해 더 많이 사용 주소 전달로 인해 더 적게 사용
안정성 원본 데이터 보호 가능 원본 데이터 손상 가능
사용 방법 기본 자료형 그대로 사용 포인터 사용

4. Call by Reference 활용 예시: 변수 값 교환

Call by Reference는 주로 여러 값을 반환하거나, 큰 데이터를 효율적으로 처리해야 할 때 사용됩니다. 아래는 두 변수의 값을 교환하는 예제입니다.

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 10, y = 20;
    printf("교환 전: x = %d, y = %d\n", x, y);
    swap(&x, &y);
    printf("교환 후: x = %d, y = %d\n", x, y);
    return 0;
}

 

출력 결과

교환 전: x = 10, y = 20  
교환 후: x = 20, y = 10

 

5. 요약 및 블로그 작성 팁

  1. Call by Value값이 변경되지 않아야 할 때 적합합니다.
  2. Call by Reference함수에서 원본 값을 수정해야 할 때 유용합니다.
  3. Call by Reference는 포인터와 관련이 있으므로, 포인터 개념을 함께 설명하면 독자 이해에 도움이 됩니다.
  4. 실제 코드 예제와 출력 결과를 포함하여 독자가 실행하며 따라할 수 있도록 구성하면 좋습니다.
728x90