Channi Studies

[C++] 역참조 (Dereferencing a Pointer) 본문

C++/포인터 (Pointers)

[C++] 역참조 (Dereferencing a Pointer)

Chan Lee 2023. 12. 19. 18:57

역참조 (Dereferencing)

모두 알다시피 포인터는 다른 데이터의 주솟값을 저장해놓는 변수입니다.

우리도 주소를 통해서 원하는 위치에 방문합니다.

C++에서도 동일합니다.

 

당연히 포인터의 값으로 원하는 데이터의 주소를 안다면,

그 주소를 통해 해당 위치에 있는 데이터에 접근할 수도 있겠죠?

 

이것을 우리는 역참조 (Dereferencing) 라고 부릅니다.

그리고 그 방법은 매우 간단합니다.

 

포인터를 선언할 때, 변수와 다른 부분이 어떤 것이였는지 기억이 나시나요?

변수와는 다르게 포인터의 이름 앞에 asterisk(*) 마크를 붙였습니다.

 

포인터가 가르키는 값(주소)를 따라가서 있는 위치에 저장된 값을 조회할 때도 동일합니다.

변수명 앞에 *를 붙이기만 하면 됩니다.

 

선언할 때와 동일한 syntax여서 조금은 헷갈릴 수도 있겠지만,

주어진 코드를 전체적으로 이해하고 나면 괜찮을 것 같습니다.

 

다음 예시로 살펴보겠습니다.

#include <iostream>

using namespace std;

int main() {
  int score{100};
  int *score_ptr{&score};

  cout << *score_ptr << endl; // 100
  *score_ptr = 200;
  cout << *score_ptr << endl; // 200
  cout << score << endl;      // 200
}

정수 변수 score과 score의 주소를 저장하는 score_ptr 포인터가 있습니다.

*score_ptr를 출력하니 score_ptr가 가르키는 score의 값인 100이 출력됩니다.

*score_ptr 값을 변경하니 score의 값이 직접적으로 변경되어 200이 됩니다.

마지막 줄에서 이 변화가 확인됩니다.

 

다른 예시를 보겠습니다.

#include <iostream>

using namespace std;

int main() {
  double high_temp{100.5};
  double low_temp{30.1};

  double *temp_ptr{&high_temp};
  cout << *temp_ptr << endl;  // 100.5

  temp_ptr = &low_temp;
  cout << *temp_ptr << endl;  // 30.1
}

한개의 포인터로 주솟값을 변경하며 출력한 예시입니다.