[42Seoul] CPP Module 01 - ex02

수빈·2022년 1월 11일
0

42CPP

목록 보기
7/11
post-thumbnail

참조자

변수는 할당된 메모리 공간에 붙여진 이름이다. 우리는 변수의 이름을 가지고 해당 메모리 공간에 접근이 가능하다. 참조자는 할당된 하나의 메모리 공간에 다른 이름을 붙이는 것을 말한다. 자신이 참조하는 변수를 대신할 수 있는 별명과 같은 것이다.

std::string	str = "HI THIS IS BRAIN";
std::string	*stringPTR = &str;
std::string	&stringREF = str;

std::cout << "str = " << str << std::endl;
std::cout << "stringPTR = " << *stringPTR << std::endl;
std::cout << "stringREF = " << stringREF << std::endl;
stringREF = "HI THIS IS NOT BRAIN";
std::cout << "====================value change====================" << std::endl;
std::cout << "str = " << str << std::endl;
std::cout << "stringPTR = " << *stringPTR << std::endl;
std::cout << "stringREF = " << stringREF << std::endl;

stringREF은 str의 별명이며 같은 메모리 공간을 참조한다. 참조자를 통해 값을 변경하면 메모리 공간을 같이 쓰는 변수의 값도 변경된다.

참조자와 포인터

참조자와 포인터는 유사한 점이 많은데, 참조자는 포인터를 잘못 사용해서 생길 수 있는 문제를 줄이기 위한 대안이며, 포인터보다 제약사항이 많다고 한다.

  • 포인터는 초기화 없이 선언이 가능하며, NULL로 초기화가 가능하다
  • 참조자는 둘 다 불가능하다. 따라서 널 포인터 역참조 같은 문제를 사전에 방지할 수 있다.
  • 또한 참조 대상의 주소에 접근할 수 있을 뿐, 참조 대상의 주소 자체를 바꾸는 것은 불가능하기 때문에 초기화된 이후로 참조대상을 변경할 수 없다.
int	main()
{
	std::string	str = "HI THIS IS BRAIN";
	std::string	*stringPTR = &str;
	std::string	&stringREF = str;
	
	std::cout << "=============================" << std::endl;
	std::cout << "           STRING            " << std::endl;
	std::cout << "=============================" << std::endl;
	std::cout << "str = " << str << std::endl;
	std::cout << "stringPTR = " << *stringPTR << std::endl;
	std::cout << "stringREF = " << stringREF << std::endl;
	std::cout << "=============================" << std::endl;
	std::cout << "           ADDRESS           " << std::endl;
	std::cout << "=============================" << std::endl;
	std::cout << "str = " << &str << std::endl;
	std::cout << "stringPTR = " << stringPTR << std::endl;
	std::cout << "stringREF = " << &stringREF << std::endl;
}

profile
42Seoul -soooh ~ 2022.04

0개의 댓글