본문 바로가기
Jaden's spectrum/📂 Programming Languages

[c++] 10. callByValue & callByReference

by JadenWe 2025. 3. 18.
반응형

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

Call by Value 방식에서는 함수에 전달된 인자의 복사본이 생성되어 함수 내부에서 사용됩니다. 따라서 원본 값에는 영향을 주지 않습니다.

Call by Value 예제

#include <iostream>
using namespace std;

void modifyValue(int num) {
    num = 50; // 함수 내부에서 값 변경
    cout << "함수 내부 num: " << num << endl;
}

int main() {
    int num = 10;
    modifyValue(num); // 값이 복사되어 전달됨
    cout << "함수 호출 후 num: " << num << endl;
    return 0;
}
함수 내부 num: 50
함수 호출 후 num: 10
 

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

Call by Reference 방식에서는 변수의 실제 메모리 주소가 함수에 전달되므로, 함수 내부에서 값을 변경하면 원본 변수에도 영향을 줍니다.

Call by Reference 예제

#include <iostream>
using namespace std;

void modifyValue(int& num) { // 참조자를 사용하여 변수 변경
    num = 50;
    cout << "함수 내부 num: " << num << endl;
}

int main() {
    int num = 10;
    modifyValue(num); // 참조 전달
    cout << "함수 호출 후 num: " << num << endl;
    return 0;
}
함수 내부 num: 50
함수 호출 후 num: 50
 

3. Call by Pointer (포인터를 이용한 전달)

Call by Reference와 유사한 방식으로, 포인터를 이용해 변수의 주소를 전달하여 원본 값을 변경할 수도 있습니다.

Call by Pointer 예제

#include <iostream>
using namespace std;

void modifyValue(int* num) { // 포인터를 이용한 값 변경
    *num = 50;
    cout << "함수 내부 num: " << *num << endl;
}

int main() {
    int num = 10;
    modifyValue(&num); // 주소 전달
    cout << "함수 호출 후 num: " << num << endl;
    return 0;
}
함수 내부 num: 50
함수 호출 후 num: 50
 

4. Call by Value vs. Call by Reference vs. Call by Pointer 비교

방식 원본 값 변경 가능 여부 전달 방법 사용 예
Call by Value ❌ (변경 불가) 값 복사 원본 값을 유지해야 할 때
Call by Reference ✅ (변경 가능) 참조자(&) 사용 직접 값을 변경해야 할 때
Call by Pointer ✅ (변경 가능) 포인터(*) 사용 포인터를 활용해야 할 때
 

5. Call by Reference를 사용할 때 주의할 점

  • 함수 내부에서 원본 변수를 직접 변경하므로, 불필요한 값 변경을 피하기 위해 신중하게 사용해야 합니다.
  • 만약 원본 값을 변경하고 싶지 않다면 const 키워드를 활용할 수 있습니다.
void printValue(const int& num) { // const로 참조
    cout << "num: " << num << endl;
}

이렇게 하면 num의 값이 함수 내에서 변경되지 않도록 보호됩니다.

 

 

 

 

[c++] 9. 포인터 & 어드레스 연산자

C++ 포인터와 어드레스 연산자(&)C++에서 포인터(pointer)는 변수의 메모리 주소를 저장하는 변수입니다. 또한, 어드레스 연산자(&)는 변수의 메모리 주소를 얻을 때 사용됩니다. 포인터를 활용하면

clarelee.tistory.com

반응형