4-2. 포인터 연산

Crat3 ㅣ 2023. 5. 11. 16:10

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