티스토리 뷰

C++에서 포인터 변수와 참조(reference)는 서로 다른 개념이며, 이 두 가지 방식은 변수에 접근하고 조작하는 방법에서 차이가 있다.


포인터 변수 (Pointer Variables)

1. 정의: 포인터는 변수의 메모리 주소를 저장하는 변수이다. 포인터는 그 자체로 주소를 가지며, 이를 통해 다른 변수의 위치를 가리킬 수 있다.
    
2. 사용법:
    - 선언:

int* ptr;


    - 초기화: 

ptr = &variable; (변수 `variable`의 주소를 `ptr`에 할당)


3. *참조 (Dereferencing): *ptr 을 사용하면 `ptr`이 가리키는 주소에 있는 실제 데이터에 접근할 수 있다.
    
4. 특징:
    - 포인터는 `nullptr`로 초기화될 수 있으며, 이는 포인터가 어떠한 유효한 메모리 주소도 가리키지 않음을 의미한다.
    - 포인터는 산술 연산(예: 포인터 증가)이 가능하며, 이를 통해 배열과 같은 연속된 메모리 블록을 순회가 가능하다.


참조 (References)

 

1. 정의: 참조는 다른 변수의 별명(alias)으로 사용됩니다. 참조를 선언하면, 이후 참조 이름을 사용하면 원래 변수를 직접 조작하는 것과 같은 효과를 낼 수 있다.
    
2. 사용법:
    - 선언: 

int& ref = variable; (변수 `variable`에 대한 참조 `ref` 생성)


3. 특징:
    - 참조는 선언과 동시에 초기화되어야 하며, 이후 다른 변수를 참조하도록 변경할 수 없다.
    - 참조는 `nullptr` 또는 다른 주소로 초기화될 수 없다.
    - 참조는 메모리 주소를 직접 다루지 않으므로, 포인터처럼 산술 연산을 할 수 없다.



차이점 요약


- 초기화: 참조는 선언 시 초기화되어야 하지만, 포인터는 선언 후 언제든지 초기화될 수 있다.
- 유효성: 포인터는 `nullptr`을 가질 수 있지만, 참조는 항상 유효한 객체를 참조해야만 한다.
- 유연성: 포인터는 주소를 변경할 수 있으나, 참조는 초기화 이후 변경할 수 없다.
- 간접 접근: 포인터는 역참조를 통해 간접적으로 값에 접근하지만, 참조는 직접 접근한다..

이러한 차이점들로 인해, 포인터와 참조는 서로 다른 상황에 적합하게 사용되며, 포인터는 더 유연하고 복잡한 메모리 조작에 유용하며, 참조는 보다 안전하고 직관적인 코드 작성에 도움이 된다!

Comments