포인터

 

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

 

 


 

지금까지 사용한 방식

 

  • number라는 이름의 4바이트 정수 타입의 바구니를 만든다
  • number라는 변수 스택 메모리에 할당
  • number = 1라 함은, number 바구니에 1이라는 숫자를 넣으라는 의미.
  • 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈이다.
  • number는 비유하자면 메모리에 이름을 붙인 것 (찰떡같이 알아들어서)
  • BUT, 원본 수정이 불편하다.

 

포인터 기초

 

TYPE* 변수이름;

  •  일단 2가지 요소
    •  TYPE
    •   *
          
  • 바구니는 바구니인데...
    • [주소를 저장하는 바구니다!]
    • 변수 선언할 때 * 등장했다 -> 포인터 = 주소
    • 참고) 포인터라는 바구니는 4바이트(32비트) or 8바이트(64비트) 고정 크기  
      • x86 -> 4바이트(32비트)
      • x64 -> 8바이트(64비트)

 

 

int* ptr = &number;

  • 근데 남의 주소를 갖고 뭘 하라는거지?
    • 추가 문법 : [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라!
  • *변수이름 = 값;
    •  포탈을 타고 순간이동 한다고 생각해보자.
    • *이 여러번 등장하니 헷갈리는데, 사용 시점에 따라서 구분해서 기억하자.
      • 변수 선언(주소를 저장하는 바구니다)
      • 사용할 때 (포탈 타고 순간이동)

 

 


 

전체 코드

 

코드1

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

int main()
{
    int number = 1;

    int* ptr = &number;

    return 0;
}

 

 

주소: &ptr

0x0073F878  0073F884

0X0073F884  00000001    // value1의 값은 1

 

 

코드2

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

int main()
{
    int number = 1;


    int* ptr = &number;

    int value1 = *ptr;
    *ptr = 2;

    return 0;
}

0x0073F884  00000002 

 

Assembly Language

lea    eax, [number]            // number의 주소를 eax 레지스터에 넣음.

mov  dword ptr [ptr], eax    // eax를 ptr에 넣어줌.

 

ptr를 eax에 넣어줌.

eax를 ecx에 넣어줌

ecx를 value1에 넣어줌.

 

ptr 값을 eax에 넣어줌

eax 주소로 이동해서 2를 넣어줌.

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

[C++] 포인터 연산  (0) 2022.03.25
[C++] 포인터 #2  (0) 2022.03.25
[C++] TextRPG  (0) 2022.03.24
[C++] 오버 로딩, 오버 로딩과 오버라이딩의 차이, 함수 마무리  (0) 2022.03.22
[C++] 호출 스택  (0) 2022.03.22