본문 바로가기
코딩/C++

참조 변수 Reference Variable

by sonysame 2024. 3. 9.

참조변수는 별명 같은 것!

#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