포인터 연산

 

인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!

 

 


 

포인터 연산의 종류

 

1) 주소 연산자 (&)
2) 산술 연산자 ( + - )
3) 간접 연산자 ( * )
4) 간접 멤버 연산자 ( -> )

 


 

 

1. 주소 연산자 (&)

 

포인터는 [주소를 담는 바구니]

  • 해당 변수의 주소를 알려준다.
  • 더 정확히 말하면 해당 변수 타입(TYPE)에 따라서 TYPE* 반환

 


 

2. 산술 연산자 ( +  - )

 

number = number + 1;
number++;

++number;

number += number;

 

pointer = pointer + 1;

pointer++;

++pointer;

pointer += 1;

 

 

int*

  • * 
    • 포인터 타입이네! (4 or 8바이트) 주소를 담는 바구니!  
    • 64비트 프로그램 : 8바이트, 86비트 프로그램 : 4바이트
  • int
    • 주소를 따라가면 int(4바이트 정수형 바구니)가 있다고 가정해라!     

 

 

포인터에서 +나 - 등 산술 연산으로 1을 더하거나 빼면, 정말 '그 숫자'를 더하고 빼라는 의미가 아니다.

한번에 TYPE의 크기만큼을 이동하라! 

 

다음/이전 바구니로 이동하고 싶다 << [바구니 단위]의 이동으로

즉, 1을 더하면 = 바구니 1개 이동시켜라. 3을 더하면 = 바구니 3개 이동시켜라

 

pointer += 1를 했을때 4 증가 하였다.

 

 


 

 

3. 간접 연산자 ( * )

 

포탈을 타고 해당 주소로 이동한다.  ex. (*playerPtr).hp = 200;

 

 


 

4. 간접 멤버 연산자 ( -> )

 

* 간접 연산자

  • 포탈 타고 해당 주소로 이동

. 구조체의 특정 멤버를 다룰 때 사용

  • 어셈블리 언어로 까보면 사실상 그냥 덧셈

->

  • ->는 *와 .를 한방에 해결

 

(*playerPtr).hp = 200;
(*playerPtr).damage = 200;

 

playerPtr->hp = 200;
playerPtr->damage = 200;

 

어셈블리 코드로 확인해보면 위와 아래는 완전히 동일하다.

 


 

 

전체 코드

 

더보기
#include <iostream>
using namespace std;

struct Player
{
    int hp;   // +0
    int damage; // +4
};

int main()
{
    int number = 1;

    // 1) 주소 연산자 (&)
    // - 해당 변수의 주소를 알려주세요~
    // - 더 정확히 말하면 해당 변수 타입(TYPE)에 따라서 TUYPE* 반환
    int* pointer = &number;

    // 2) 산술 연산자 (+ -)

    number += 1; // 1 증가했다 (!)

    pointer += 1; // 4 증가했다 (?) 다음 바구니로 이동했다는 의미. int형이 4바이트이기 때문에 4만큼 증가했다.


    // 3) 간접 연산자 (*)
    // - 포탈을 타고 해당 주소로 슝~ 이동
    number = 3;
    *pointer = 3;
        
    Player player;
    player.hp = 100;
    player.damage = 10;

    Player* playerPtr = &player;
    (*playerPtr).hp = 200;
    (*playerPtr).damage = 200;

    // 4) 간접 멤버 연산자 (->)

    playerPtr->hp = 200;
    playerPtr->damage = 200;

    return 0;
}

 

 

'⭐ Programming > C++' 카테고리의 다른 글

[C++] 참조 기초  (0) 2022.03.26
[C++] 포인터 실습  (0) 2022.03.26
[C++] 포인터 #2  (0) 2022.03.25
[C++] 포인터 #1  (0) 2022.03.24
[C++] TextRPG  (0) 2022.03.24