반응형
역참조 연산자(*)
역참조 연산자는 C++ 프로그래머가 많이 사용하는 연산자이지만 명칭을 일이 없다보니 입에 잘 붙지 않는 명칭이다.
역참조 연산자는 *(애스터리스크, Asterisk)를 이용해서 표현한다. 포인터인 변수 앞에 *를 붙이면, 해당 포인터가 가리키고 있는 메모리 주소의 실제 값에 접근한다.
- 포인터 선언 : int* var = new int();
- 역참조 : int value = *var
- 문법 : *포인터
만약 포인터가 객체(구조체나 클래스)를 가리키고 있다면, 이 상태에서 멤버에 접근하기 위해서는 괄호가 필요하다.
(*ptr).member; // 포인터를 먼저 역참조하여 객체로 만든 뒤, 멤버에 접근
괄호를 사용하는 이유는 . 연산자(점 연산자)가 * 연산자보다 우선순위가 높기 때문에 *ptr.member라고 작성하면 오류가 발생한다. 이는 *(ptr.member)로 읽히기 때문이다. 반드시 (*ptr).member 처럼 괄호를 작성해야 한다.
화살표 연산자(->)
역참조 연산자를 이용해서 해당 객체의 실제 값으로 접근해서 멤버 변수의 접근하는 일은 자주 빈번하게 일어나는데 이때마다 괄호를 작성하면 매우 불편하고 실수할 일이 많아질 것이다. 그래서 컴파일러는 문법 설탕(Syntax Sugar)를 제공해주는데 그것이 바로 화살표 연산자이다.
- 포인터 선언 : int* var = new int();
- 화살표 연산자 : var->memeber
- 문법 : 포인터->멤버이름
화살표 연산자를 사용하면 (*ptr).member로 작성하던 코드를 ptr->member처럼 간단하게 작성하기만 하면 된다.
예제 코드
#include <iostream>
#include <string>
struct Player {
std::string name;
int level;
};
int main() {
Player p1 = {"Alice", 10};
Player* ptr = &p1;
// 1. 역참조 + 점 연산자 사용
std::cout << (*ptr).name << std::endl;
// 2. 화살표 연산자 사용 (1번과 100% 동일함)
std::cout << ptr->name << std::endl;
return 0;
}
정리하자면
- * 역참조 연산자는 해당 포인터의 알맹이를 꺼내겠다는 의미
- -> 화살표 연산자는 (*ptr).member 해당 포인터의 알맹이의 특정 멤버를 바로 보겠다는 의미
- 즉, * 역참조 연산자와 . 점 연산자를 합쳐서 컴파일러가 제공해주는 프로그래머 편의 기능이다.
- 추가적으로 역참조 연산자는 연산자 오버로딩이 불가하다. 화살표 연산자는 오버로딩이 가능하다.

함께 읽으면 좋은 글
C++ *와 & 연산자 톺아보기
* 역참조 연산자타입 선언 시 사용하게 되면 해당 타입이 포인터 타입이라는 것을 명시하는 용도로 사용한다.이 변수는 주소를 저장하는 바구니입니다.라고 선언int* ptr; (ptr은 주소 저장용)변수
jettstream.tistory.com
'프로그래밍 > C++' 카테고리의 다른 글
| C++ *와 & 연산자 톺아보기 (0) | 2026.03.29 |
|---|---|
| C++ operator<< 삽입 연산자 톺아보기 (0) | 2026.03.14 |
| 생산자 - 소비자 패턴으로 스레드 공부하기 (0) | 2026.02.21 |
| 바쁜 대기(Busy Waiting)에 대해서 알아보자 (0) | 2026.02.01 |
| 상호배제란 무엇인가? (0) | 2026.02.01 |
댓글