IT 프로그래밍/C++

[따배시 6.14] 참조 변수

기술1 2024. 3. 30. 10:01
반응형
#include<iostream>
using namespace std;
int main()
{
	int value1 = 5;
	int value2 = 10;

	int& ref1 = value1;

	cout << ref1 << endl;

	ref1 = value2;

	cout << ref1 << endl;

	return 0;
}

이렇게 5와 10이 나오는 이유는 보시다시피 처음에 ref1의 주소를 value1으로 해주었고 그래서 5가 처음에 나오는 것이며 그 다음에 ref = value2;로 변경해주면서 ref1또한 10으로 바뀐 것입니다. 

 

 

 

#include<iostream>
using namespace std;


void doSomething(int n)
{
	n = 10;
	cout << "In doSomething" << n << endl;
}

int main()
{
	int n = 5;

	cout << n << endl;
	doSomething(n);

	cout << n << endl;

	return 0;
}

이렇게 함수를 하는 경우 함수 안에 n과 int main 안에 정의된 n은 다른 것이라고 보면 됩니다. 이런식으로 함수로 정의해준 다음에도 다시 n을 출력하면 5로 나오는 것을 볼 수 있습니다. 

 

#include<iostream>
using namespace std;


void doSomething(int &n)
{
	n = 10;
	cout << "In doSomething" << n << endl;
}

int main()
{
	int n = 5;

	cout << n << endl;
	doSomething(n);

	cout << n << endl;

	return 0;
}

하지만 void doSomething(int &n)을 해준다면 넘기는 변수의 주소를 그대로 넘기는 것이기 때문에 n이 10으로 바뀌는 것입니다. 따라서 int &n을 하면 n 변수 자체가 넘겨가지는 것입니다. 포인터로 넣었을 때는 변수 자체를 복사를 한번 해야하는데 &로 넘기면은 변수 자체로 넘어가는 것이기 때문에 주소 자체를 복사할 필요가 없습니다.

 

어떤 경우에는 n의 값이 doSomething으로 들어가는데 못 들어가게 막고 싶을 때도 있습니다.  바꾸고 싶지 않으면 const로 막아주면 됩니다. 

 

 

 

 

반응형