&, *, ->의 역할을 “한 문장”으로 설명하기. vs ->를 헷갈리지 않게 구분하기*ptr.hp 같은 우선순위 실수를 왜 괄호로 막아야 하는지&x는 주소, *p는 따라가기(역참조)라는 의미를 자동으로 떠올릴 수 있다.. / 포인터면 ->”를 자동으로 구분할 수 있다.| 연산자 | 이름 | 설명 |
|---|---|---|
& | 주소 연산자 | 변수의 주소를 가져옴 |
* | 간접 연산자 (역참조) | 포인터가 가리키는 주소의 값을 읽거나 수정 |
+, - | 산술 연산자 | 포인터가 타입 크기 단위로 이동 |
-> | 간접 멤버 연산자 | 구조체 포인터가 멤버에 접근할 때 사용 |
핵심 한 줄 요약:
& = “주소를 얻는다”* = “주소를 따라가서 값을 건드린다”-> = “포인터로 따라가서(역참조) 멤버에 접근한다”struct StatInfo
{
int hp;
int attack;
int defence;
};
StatInfo monster;
StatInfo* ptr = &monster;
(*ptr).hp = 100; // 방법 1
ptr->hp = 100; // 방법 2 (동일, 더 간편)
ptr은 주소. *ptr로 순간이동해 구조체에 도착. 그다음 .hp로 멤버 접근.->는 (*ptr).hp의 축약형. 포인터로 관리할 때 -> 사용.// 의도: (*ptr).hp
// 실수: *ptr.hp (컴파일 에러 또는 전혀 다른 의미)
그래서 안전하게 항상 괄호를 씁니다.
ptr이 nullptr일 수 있다면, ptr->hp는 바로 크래시로 이어질 수 있습니다.if (ptr == nullptr)
return;
ptr->hp = 100;
monster.hp → 점 사용.ptr->hp → 화살표 사용. (먼저 역참조한 뒤 멤버 접근)ptr->hp는 (*ptr).hp와 완전히 같은 의미일까?ptr이 nullptr이면 ptr->hp는 왜 위험할까?monster.hp와 ptr->hp의 차이는 “값/주소” 관점에서 무엇일까?