[c++] 포인터와 레퍼런스 데이터 타입
포인터(*
)와 레퍼런스(&
)는 C++에서 중요한 역할을 하는 데이터 타입입니다. 이들은 메모리를 다루는 데 사용되며, 특히 동적으로 할당된 메모리나 함수 호출 시 인자 전달에 자주 활용됩니다.
포인터
포인터는 메모리 주소를 저장하는 변수입니다. 다른 변수의 메모리 주소를 가리키는 데 사용되며, 이를 통해 메모리에 직접적으로 접근할 수 있습니다.
예를 들어, int* ptr
은 정수형 데이터를 가리키는 포인터를 선언하는 것이며, 해당 포인터를 통해 메모리의 값을 읽거나 쓸 수 있습니다.
int main() {
int num = 10;
int* ptr = # // num 변수의 주소를 ptr에 저장
*ptr = 20; // ptr을 따라가서 해당 주소에 새로운 값인 20을 저장
std::cout << num; // 출력 결과: 20
return 0;
}
레퍼런스
레퍼런스는 기존 변수에 대한 별칭(alias)을 만드는 데 사용됩니다. 레퍼런스를 통해 기존 변수를 가리키는 새로운 이름을 만들어내므로, 해당 변수를 다룰 때 편리하게 사용할 수 있습니다.
int main() {
int num = 10;
int& ref = num; // num 변수에 대한 레퍼런스 생성
ref = 20; // ref를 통해 num 변수에 새로운 값인 20을 저장
std::cout << num; // 출력 결과: 20
return 0;
}
포인터와 레퍼런스의 차이
포인터는 nullptr
또는 다른 주소를 가리킬 수 있는 반면, 레퍼런스는 항상 기존 변수에 대한 별칭이어야 합니다. 또한, 포인터는 주소 연산자(&
) 또는 간접 참조 연산자(*
)를 사용하여 값에 접근하지만, 레퍼런스는 그런 연산자 없이 직접적으로 값을 변경할 수 있습니다.
결론
포인터와 레퍼런스는 C++에서 메모리 관리와 변수 다루기에 중요한 역할을 합니다. 올바르게 활용하면, 효율적이고 강력한 프로그램을 작성할 수 있습니다. 하지만 잘못 사용할 경우 버그를 발생시키거나 메모리 누수를 초래할 수 있으므로 주의가 필요합니다.
더 자세한 정보는 C++ 참조 문서를 참고하세요.