반응형
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
반응형
'Jaden's spectrum > 📂 Programming Languages' 카테고리의 다른 글
[c++] 11. 더블 포인터 & 포인터의 메모리 (0) | 2025.03.20 |
---|---|
[c++] 9. 포인터 & 어드레스 연산자 (0) | 2025.03.18 |
[c++] 8. 함수 (0) | 2025.03.17 |
[c++] 7. define & 하드코딩 (0) | 2025.03.17 |
[C++] 6. 배열 (+다중 배열) (0) | 2025.03.17 |