반응형
#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로 막아주면 됩니다.
반응형
'IT 프로그래밍 > C++' 카테고리의 다른 글
[따배시 6.17~18] for-each 반복, void 포인터 (0) | 2024.03.30 |
---|---|
[따배시 6.15 ~ 6.16] 참조, 포인터와 참조의 멤버 선택 연산자 (0) | 2024.03.30 |
[따배시 6.13] 포인터와 const (0) | 2024.03.29 |
[따배시 6.11] 메모리 동적할당 new와 delete (1) | 2024.03.29 |
[따배시 6.10] C언어 스타일의 문자열 심볼릭 상수, 포인터 사용의 유의점 (0) | 2024.03.29 |