reference : 포인터와 같이 메모리 어딘가에 위치한 한 개체의 주소를 저장한다.
그러나 포인터와는 다르게, 한번 초기화된 후 다른 개체를 참조하고나 null로 만들 수 없다.
종류
int main()
{
int a = 8, b = 4;
// 포인터 p
int *p = &a; // p는 a의 주소값을 가리킴.
std::cout << *p << std::endl; // 8
// 포인터는 다른 개체의 주소로 바꿀 수 있음.
p = &b;
std::cout << *p << std::endl; // 4
// lvalue참조 r
// 포인터는 주소값을 저장하지만, lvalue참조는 변수를 지정해줌
// 초기화할 때 해당 변수의 주소값을 lvalue참조가 내부적으로 가지고 있음.
int &r = a; // a에 대한 참조로 초기화.
std::cout << r << std::endl; // 8
std::cout << a << "," << b << std::endl; // 8,4
// lvalue참조는 초기화할 때만 그 주소를 저장하기 때문에
// 이 대입은 r이 b의 변수를 참조하게 하는 것이 아니라
// r이 참조하고 있는 a의 값 자체를 변화시키는 것
r = b;
std::cout << r << std::endl; // 4
std::cout << a << "," << b << std::endl; // 4,4
return 0;
}