[C++] 참조자(&)를 쓰는 이유

visualnnz·2024년 2월 25일
0

Cpp

목록 보기
6/7

참조자(&)란?


  • 변수의 또 다른 이름(별명)을 컴파일러에게 알려주는 것이다.

  • 참조자 정의하는 법 : 가리키고자 하는 타입 뒤에 &를 붙여준다.

  • 반드시 선언정의동시에 해줘야 한다.

  • 참조자는 한번 어떤 변수의 참조자가 돼버리면 더 이상 다른 변수를 참조할 수 없게 된다.



#include <iostream>

int main()
{
	int a = 2;
	int &ref_a = a;

	std::cout << "a : " << a << std::endl;
	std::cout << "ref_a : " << ref_a << std::endl;

	a = 3;
	std::cout << "a : " << a << std::endl;
	std::cout << "ref_a : " << ref_a << std::endl;

	ref_a = 4;
	std::cout << "a : " << a << std::endl;
	std::cout << "ref_a : " << ref_a << std::endl;

	return 0;
}

🖥️ 출력

a : 2
ref_a : 2
a : 3
ref_a : 3
a : 4
ref_a : 4

  • 위의 결과에서 보듯이, a에서 바꾸든 ref_a에서 바꾸든 같은 변수를 참조하기 때문에 값이 똑같이 변하는 것을 알 수 있다.

  • 컴파일러에게 새로운 별명을 알려주는 것이기 때문에 결국 똑같은 주소를 가지고 있다고 생각하면 편하다.

참조자의 특이한 특성으로는, 포인터와는 달리 메모리상에 존재하지 않을 수도 있다.



참조자(&)를 왜 쓰는가


  1. 한번 초기화되면 절대 다른 객체를 참조할 수 없으므로 포인터보다 안전하다.

#include <iostream>

int main()
{
	int a = 2;
    int b = 5;
	int &ref_a = a;

	std::cout << "a : " << a << std::endl;
	std::cout << "ref_a : " << ref_a << std::endl;

	ref_a = b;
	std::cout << "a : " << a << std::endl;
	std::cout << "ref_a : " << ref_a << std::endl;

	return 0;
}

🖥️ 출력

a : 2
ref_a : 2
a : 5
ref_a : 5

위의 코드처럼 ref_a = b를 하게 되면 새롭게 b를 참조하게 되는 것이 아니라 b의 값이 ref_a에 대입된다.





출처
[C++]참조자는 왜 쓰는걸까?, https://80000coding.oopy.io/ddcdbb4d-461a-4a64-97b8-5040fc49c7d6, (2022. 3. 18.)

0개의 댓글

관련 채용 정보