0. 연산자의 종류
(1) 주소 연산자(&)
int number = 1;
int* ptr = &number;
number의 주소를 ptr에 저장한다.
(2) 산술 연산자(덧셈, 뺄셈)
number++;
number += 1;
ptr++;
ptr += 1;
기존의 연산처럼 더하거나 뺄 수 있다.
그러나, 포인터는 1이 아닌 4만큼 증가했는데
포인터를 산술 연산(덧셈, 뺄셈)을 하면 TYPE(여기에서는 int형)의 크기만큼 이동하라는 것임
즉, 1을 더하면 4바이트 만큼 이동, 3을 더하면 12바이트 만큼 이동한다.
구조체를 사용할 때 유용하게 사용할 수 있다.
struct Player
{
int hp;
int attack;
};
int main()
{
Player player; // [구조체 명] [개체]
player.hp = 100;
player.attack = 10;
Player* PlayerPtr = &player; // PlayerPtr인 포인터에 player 개체의 주소를 대입
(*PlayerPtr).hp = 200; // 해당 주소를 찾아가서 hp에 200을 대입
(*PlayerPtr).attack = 20; // 해당 주소를 찾아가서 attack에 200을 대입
cout << player.hp << player.attack << endl;
return 0;
}
위의 PlayerPtr.hp 에서 4바이트만큼 이동하여 PlayerPtr.attack에 20을 대입하는 식으로 작동하게 된다.
(3) 간접 연산자(*)
*ptr = 3;
ptr이 저장한 주소의 값에 3을 대입한다.
여기에서는 number = 3; 과 동일하다.
(4) 간접 멤버 연산자(->)
구조체의 특정 멤버의 값을 다룰 때 사용한다.
PlayerPtr->hp = 200;
PlayerPtr->attack = 20;
클래스에서도 동등하게 사용할 수 있다.
'기초 C++ 스터디' 카테고리의 다른 글
4-5. 포인터 vs 참조 (0) | 2023.05.11 |
---|---|
4-4. 참조 (0) | 2023.05.11 |
4-1. 포인터 (0) | 2023.05.11 |
3-7. 구조체 (0) | 2023.05.10 |
3-5. 함수 오버로드, 기본 인자값, 스택 오버플로우 (0) | 2023.05.09 |