tech/C++

[C++] call by value와 call by reference

sunm2n 2025. 12. 7. 20:04

call by value

 

call by reference

 

 

 

 

참조를 이용한 Call-by-reference

 

 

 

결론

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

 

"원본의 복사본을 전달"

  • 작동 방식: 함수를 호출할 때 전달하는 변수의 값(Value)을 복사해서 함수의 매개변수에 넣는다.
  • 특징: 함수 내부에서 매개변수의 값을 아무리 변경해도, 함수 밖에 있는 원본 변수에는 전혀 영향을 주지 않는다.
  • 사용 목적: 원본 데이터를 보호하고 싶거나, 값을 바꿀 필요가 없을 때 사용한다.
// Call by Value 예시
void swap1(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

 

함수가 끝나면 복사본은 사라지므로 mainab 값(10, 50)은 그대로 유지

 

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

"원본에 접근할 수 있는 주소(참조)를 전달"

  • 작동 방식: 값 대신 주소 값(Address)을 전달하거나 참조자(Reference)를 통해 원본 메모리 공간에 직접 연결한다.
  • 특징: 함수 내부에서 매개변수를 조작하면, 원본 변수의 값도 실제로 변경된다. 외부 메모리 공간에 직접 접근할 수 있기 때문이다.
// Call by Reference (포인터) 예시
void swap2(int *a, int *b) {
    int temp = *a; // 주소가 가리키는 값을 가져옴
    *a = *b;       // 주소를 찾아가서 값을 바꿈 (원본 변경)
    *b = temp;
}

 

 

main 함수에서 swap2(&a, &b)로 주소를 전달하면, 함수가 주소를 찾아가서 값을 실제로 바꾼다.

결과: mainab 값이 실제로 서로 바뀐다.(50, 10) .

 

// Call by Reference (참조자) 예시
void SwapByRef2(int &ref1, int &ref2) {
    int temp = ref1;
    ref1 = ref2; // 원본 변수의 별명(ref1)을 통해 직접 수정
    ref2 = temp;
}

 

 

이 방식 또한 원본 변수에 직접 접근하므로 값이 실제로 바뀐다.

 

요약 비교

구분 Call by Value Call by Reference
전달 내용 값의 복사본 10
주소 값 또는 참조 11
 
원본 영향 원본은 변하지 않음 원본이 변경될 수 있음 12
메모리 접근 함수 내부 메모리만 사용 외부(호출자)의 메모리에 접근 가능
결과 a: 10, b: 50 (유지) 13 a: 50, b: 10 (교환됨) 14