[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++ 참조 문서를 참고하세요.