CS/C++

[C++] Pointer 와 Reference

sliver__ 2022. 11. 17. 00:43
728x90
  • C++ 에서 실제 memory address를 주소 연산자인 ampersand sign( & ) 을 사용하여 조회한다.

 

 

 

[Pointer]

  • 저장된 memory address 사용할 수 있는 자료형인 pointer를 사용한다.
  • pointer는 구체적인 타입을 가리킨다.
  • 예시는 아래와 같다. 
type *pointer_name;
tpye *pointer_name *pointer_name2, * ... ;
  • asterisk ( * ) 가 선언되었을 때만 pointer이다.
  • 아래는 왼쪽만 pointer인 예시이다.
type* pointer_name, pointer_name;
  • pointer의 size는 사용되는 platform에 의존적이다.
  • 포인터의 선언은 아래와 같다.
type *pointer_name1 = &variable_name;
type *pointer_name2 = pointer_name1

type **pointer_name = &pointe_name1;
  • pointer를 가리키는 pointer는 asterisk가 하나를 더 붙여 사용한다.
  • memory address를 직접 접근하기 위해서는 dereference operator ( * ) 를 사용한다.
  • 예시는 아래와 같다.
type *pointer_name = &variable_name1;
type variable_name2 = *pointer_name;

 

 

[Reference]

  • 포인터와는 다르게 reference는 object는 alias이다.
  • reference 예시는 아래와 같다.
type variable_name = value;
type &reference_name = variable_name
  • 포인터를 사용하여 세 가지 주요 차이점을 식별할 수 있습니다.
    • 일단 초기화되면 참조는 초기 개체에 바인딩된 상태로 유지됩니다. 따라서 다른 개체에 대한 참조를 재할당할 수 없습니다. 참조에 대해 수행되는 모든 작업은 실제로 참조된 개체에 대한 작업입니다.
    • 참조를 리바인딩할 가능성이 없으므로 초기화가 필요하다.
    • 참조는 항상 메모리에 저장된 변수와 연결되지만 변수가 유효하지 않을 수 있으므로 이 경우 참조를 사용하면 안 됩니다. 이에 대해서는 6과 객체 지향 프로그래밍에서 자세히 살펴보겠습니다. 동일한 개체에 대한 여러 참조를 정의할 수 있습니다. 참조가 개체가 아니므로 다른 참조에 대한 참조를 가질 수 없습니다.
728x90