참조변수는 별명 같은 것!
#include <iostream>
using namespace std;
void doSomething1(int n)
{
n = 10;
cout << "In doSomething1 " << n << " " <<&n<< endl; //10 주소 다름
}
void doSomething2(int& n) //값이 바뀌기 싫은 경우에는 const int& n 을 인자로!
{
n = 10;
cout << "In doSomething2 " << n << " " << &n << endl; //10 주소 같음
}
////////////////////////////////////////////////////////////////////
struct Something {
int v1;
float v2;
};
struct Other {
Something st;
};
////////////////////////////////////////////////////////////////////
int main() {
int value = 5;
int* ptr = nullptr;
ptr = &value;
int& ref = value; //반드시 초기화가 되어야 한다. 별명과 비슷한 것!
//int& ref = 104; literal은 들어갈 수 없다.
ref = 10;
cout << value << " " << ref << endl;
cout << &value << " " << &ref << " " << ptr << endl; //모두 동일
////////////////////////////////////////////////////////////////////
const int y = 9;
//int& ref = y; const는 넣을 수 없다.
////////////////////////////////////////////////////////////////////
int value1 = 5;
int value2 = 10;
int& ref1 = value1;
cout << ref1 << endl; //5
ref1 = value2;
cout << value1 << " " << value2 << " "<< ref1 << endl; //10 10 10
////////////////////////////////////////////////////////////////////
int n = 5;
cout << n << " "<<&n<<endl;
doSomething1(n);
cout << n << endl; //5
doSomething2(n);
cout << n << endl; //10
////////////////////////////////////////////////////////////////////
Other ot;
int& v1 = ot.st.v1;
v1 = 1.0; // ot.st.v1 = 1.0;와 동일한 케이스
////////////////////////////////////////////////////////////////////
int value = 5;
int* const ptr=&value;
int& ref = value;
*ptr = 10;
ref = 10; //*ptr가 동일한 케이스
return 0;
}
함수인자로 const int&를 사용할 경우 literal도 넣어줄 수 있다.
#include <iostream>
using namespace std;
void doSomething(const int& x) {
cout << x << endl;
}
int main()
{
const int& ref_x = 3 + 4; //이거는 가능!
int a = 1;
doSomething(a);
doSomething(1);
doSomething(a + 3);
return 0;
}
구조체에 참조변수 사용하는 경우
#include <iostream>
using namespace std;
struct Person {
int age;
double weight;
};
int main()
{
Person person;
person.age = 5;
person.weight = 30;
Person& ref = person;
ref.age = 15;
cout << person.age << endl; //15
Person* ptr = &person;
ptr->age = 30;
cout << person.age << endl; //30
(*ptr).age = 20;
cout << person.age << endl; //20
cout << &person << " " << &ref << " " << ptr << endl; //동일
return 0;
}
'코딩 > C++' 카테고리의 다른 글
void 포인터 (0) | 2024.03.10 |
---|---|
for-each 반복문 (0) | 2024.03.10 |
const 포인터 (0) | 2024.03.09 |
동적할당(new, delete) (0) | 2024.03.08 |
문자열 const char * (0) | 2024.03.08 |