C에서는 두 가지 다른 방법으로 매개변수를 전달할 수 있습니다. 이것들은 값에 의한 호출과 주소에 의한 호출입니다. C++에서 우리는 또 다른 기술을 얻을 수 있습니다. 이것을 참조에 의한 호출이라고 합니다. 이들의 효과와 작동 방식을 살펴보겠습니다.
먼저 값에 의한 호출을 볼 것입니다. 이 기술에서 매개변수는 함수 인수에 복사됩니다. 따라서 일부 수정이 완료되면 실제 값이 아닌 복사된 값이 업데이트됩니다.
예시
#include <iostream>
using namespace std;
void my_swap(int x, int y) {
int temp;
temp = x;
x = y;
y = temp;
}
int main() {
int a, b;
a = 10;
b = 40;
cout << "(a,b) = (" << a << ", " << b << ")\n";
my_swap(a, b);
cout << "(a,b) = (" << a << ", " << b << ")\n";
} 출력
(a,b) = (10, 40) (a,b) = (10, 40)
주소에 의한 호출은 변수의 주소를 함수에 전달하여 작동합니다. 따라서 해당 주소가 가리키는 값으로 함수가 업데이트되면 실제 값이 자동으로 업데이트됩니다.
예시
#include <iostream>
using namespace std;
void my_swap(int *x, int *y) {
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a, b;
a = 10;
b = 40;
cout << "(a,b) = (" << a << ", " << b << ")\n";
my_swap(&a, &b);
cout << "(a,b) = (" << a << ", " << b << ")\n";
} 출력
(a,b) = (10, 40) (a,b) = (40, 10)
주소에 의한 호출과 마찬가지로 여기에서는 참조에 의한 호출을 사용합니다. 이것은 C++ 전용 기능입니다. 인수의 참조 변수를 전달해야 하므로 업데이트를 위해 실제 값이 업데이트됩니다. 함수 정의에서만 변수명 앞에 &를 붙여야 합니다.
예시
#include <iostream>
using namespace std;
void my_swap(int &x, int &y) {
int temp;
temp = x;
x = y;
y = temp;
}
int main() {
int a, b;
a = 10;
b = 40;
cout << "(a,b) = (" << a << ", " << b << ")\n";
my_swap(a, b);
cout << "(a,b) = (" << a << ", " << b << ")\n";
} 출력
(a,b) = (10, 40) (a,b) = (40, 10)