1. Call by value
Call by value란 함수 호출 시 넘기는 인자의 값이 매개변수에 복사 되어서 함수에서만 동작하도록 하는 것이다.
Call by value로 전달된 매개변수는 함수 내의 지역 변수 역할을 하며 함수가 종료될때 함께 종료되어 사라진다.
따라서 swap을 해도 값이 바뀌지 않는다.
void callByValue(int a, int b){
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
callByValue(a, b);
cout << "Value a=" << a << endl;
cout << "Value b=" << b << endl;
return 0;
}
>> 10, 20
2. call by pointer
call by pointer는 포인터를 통해 변수 a와 변수 b에 대한 주소를 직접 가져와서 함수 내부에서 포인터를 역참조(*a, *b) 하여 해당 주소에 저장된 변수의 값을 변경하는 방식이다. 이는 원본 변수의 값을 변경할 수 있으며, 변수의 주소를 전달함으로써 변수에 대한 수정을 함수 외부에서도 반영할 수 있다.
void callByPointer(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = 10;
int b = 20;
callByPointer(&a, &b);
cout << "ref a=" << a << endl;
cout << "ref b=" << b << endl;
return 0;
}
>> 20,10
3. call by reference
call by ref는 변수 참조를 통해 변수 a, b의 메모리 위치에 직접 접근하여 값을 변경한다. 이때 int& a와 int& b를 사용하는 것은 변수 a와 b의 주소를 읽어오는 것이 아니라, 변수 a와 b에 대한 참조를 생성하는 것이다. 이 참조를 통해 변수 a와 b와 동일한 메모리 위치에 접근하여 원본 값을 직접 조작할 수 있지만 변수의 주소를 반환하는 것은 아니다.
C++에서 참조와 주소 연산자를 혼동하는 경우가 있는데 매개변수로 자료형 뒤에 &가 오면 해당 변수를 참조하여 직접 접근하겠다는 의미이며, 변수앞에 &가 와서 해당 변수의 메모리 주소를 반환하는 주소 연산자와는 별개이다.
void callByRef(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
callByRef(a, b);
cout << "ref a=" << a << endl;
cout << "ref b=" << b << endl;
return 0;
}
>>20,10
'C++' 카테고리의 다른 글
08. C++_string class와 관련 기능 (0) | 2024.06.16 |
---|---|
09. C++_동적으로 배열 할당하기 (0) | 2024.05.16 |
05. C++_파일 입출력 (0) | 2024.05.15 |
04. C++_얕은복사/깊은복사 (1) | 2024.03.24 |
03. C++_invoke (0) | 2024.03.24 |