[C++] 포인터와 참조자 - Pointer, Reference

    포인터(Pointer)란

    메모리의 주소값을 저장하는 변수

    데이터타입* 변수명;	// 문법
    
    int n = 10;
    int* ptr_a;
    int* ptr_b = &n;	// 포인터 변수 선언과 동시에 변수 n의 주소값을 대입해 초기화

    참조자(Reference)란

    특정 변수의 실제 이름 대신 사용하는 변수

    데이터타입& 변수명;	// 문법
    
    int n = 10;
    int& ref = n;	// 참조자 선언과 동시에 변수 n을 대입해 초기화

     

    참조자를 선언할 때의 주의사항

    1. 참조자의 타입은 대상이 되는 변수의 타입과 동일해야 함

    2. 선언과 동시에 초기화되어야 함

    3. 한 번 초기화되면 대상을 바꿀 수 없음


    포인터와 참조자의 차이

    1. NULL 값 보유 가능 여부

    포인터는 선언할 때 주소를 할당하지 않아도 돼 NULL 값을 가질 수 있지만 참조자는 선언과 동시에 주소를 할당해줘야 하기 때문에 NULL 값을 가질 수 없다.

     

    2. 매개변수로 전달했을 때의 메모리 공간 차지 여부

    함수의 매개변수로 포인터를 사용할 시 포인터의 주소를 전달한다. 전달 받은 주소를 새로운 포인터에 복사하는 것이기 때문에 새로운 메모리 공간이 필요하다. 참조자의 경우에는 함수 호출 시 값을 전달하기 때문에 추가적인 메모리 공간이 필요하지 않다.

     

    3. 객체 변경 가능 여부

    포인터는 *연산자를 이용해 지정한 객체를 변경할 수 있지만 참조자는 객체를 변경할 수 없다.

    댓글