값을 인자로 전달하는 함수의 호출 방식
호출된 함수 내에서 인자로 전달받은 변수의 값을 바꿔도, 함수 외부에 선언된 변수에는 영향이 가지 않음
int main() {
int num1 = 1;
int num2 = 2;
swap(&num1, &num2); //num1, num2에 영향x
}
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
주소값을 인자로 전달하는 함수의 호출 방식
호출된 함수 내에서 인자로 전달받은 변수의 값을 바꾸면, 함수 외부에 선언된 변수에 영향이 감
C++에는 함수 외부에 선언된 변수에 접근하는 방식이 2가지 존재
int main() {
int num1 = 1;
int num2 = 2;
swap(&num1, &num2); //num1, num2에 영향o
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int num1 = 1;
int num2 = 2;
swap(num1, num2); //num1, num2에 영향o
}
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
아래와 같이 vector 매개변수로 두어 함수를 호출한 경우 함수 안에서 값을 바꾸더라도 해당 함수가 반환된 이후인 main 함수에서는 영향이 없음.
#include<bits/stdc++.h>
using namespace std;
void func(vector<int> vect)
{
vect.push_back(30);
}
int main()
{
vector<int> vect;
vect.push_back(10);
vect.push_back(20);
func(vect);
for (int i=0; i<vect.size(); i++)
cout << vect[i] << " ";
return 0;
}
출력: 10 20
호출한 함수안에서 vector 값을 변경하고 싶은 경우에는 vector를 값에 의한 호출(call by value)이 아닌, 아래와 같이 참조에 의한 호출(call by reference)을 이용해야 함.
#include<bits/stdc++.h>
using namespace std;
void func(vector<int> &vect)
{
vect.push_back(30);
}
int main()
{
vector<int> vect;
vect.push_back(10);
vect.push_back(20);
func(vect);
for (int i=0; i<vect.size(); i++)
cout << vect[i] << " ";
return 0;
}
출력 : 10 20 30
참고
https://soyoonique.tistory.com/32
https://musket-ade.tistory.com/entry/C-Call-by-Value-Call-by-reference
https://kangworld.tistory.com/64 스택 내용 포함한 원리 설명