포인터

 

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

 

 


 

포인터

 

근데 남의 주소를 갖고 뭘 하라는거지?


추가 문법 : [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라!
*변수이름 = 값;

 

 

포탈을 타고 순간이동 한다고 생각해보자

 


*이 여러번 등장하니 헷갈리는데, 사용 시점에 따라서 구분해서 기억하자

  • 변수 선언(주소를 저장하는 바구니)다.
  • 사용할 때 (포탈 타고 순간이동)

 

 

TYPE은 왜 붙여줄까?

  • * = 포인터의 의미 = 주소를 저장하는 바구니 = 4 or 8바이트 고정 크기

 

 

주소에 가면 뭐가 있는데?

  • ex) 결혼식 청첩장에 있는 주소 = 예식장 주소
  • ex) 명함에 있는 주소 = 회사 주소
  •  * = 포인터 (주소 담는 바구니)

 


 

전체 코드

 

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

//void SetHp(int hp)
//{
//    hp = 100;
//}

void SetHp(int* hp)
{
    *hp = 100;
}


int main()
{
    int hp = 1;

    // [매개변수][RET][지역변수(hp 1)] [매개변수 hp 100][RET][지역변수]
    // SetHp(hp);    // 이 방식은 여전히 hp=1
    
    // [매개변수][RET][지역변수(hp1 -->> hp 100)] [매개변수(주소)][RET][지역변수]
    SetHp(&hp);

    int number = 1;

    int* ptr = &number;

    int value1 = *ptr;
    *ptr = 2;
    
    // 0b101010101111
    int* ptrA;

    // 타입의 불일치
    __int64* ptr2 = (__int64*)&number;  // number 4바이트
    
    *ptr2 = 0xAABBCCDDEEFF;  // 0000AABB CCDDEEFF 4바이트 두개가 들어가버림. 포인트 사용시 유의해야함.
                            // 4바이트만 들어가야 되는데 8바이트 값으로 들어가 다른영역까지 덮어서 들어감.

    return 0;
}

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
using namespace std;
 
// 포인터 
 
//void SetHp(int hp)
//{
//    hp = 100;
//}
 
void SetHp(int* hp)
{
    *hp = 100;
}
 
 
int main()
{
    int hp = 1;
 
    // [매개변수][RET][지역변수(hp 1)] [매개변수 hp 100][RET][지역변수]
    // SetHp(hp);    // 이 방식은 여전히 hp=1
    
    // [매개변수][RET][지역변수(hp1 -->> hp 100)] [매개변수(주소)][RET][지역변수]
    SetHp(&hp);
 
 
    // 지금까지 사용한 방식
    // number라는 이름의 4바이트 정수 타입의 바구니를 만든다
    // number라는 변수 스택 메모리에 할당
    // number = 1라 함은, number 바구니에 1이라는 숫자를 넣으라는 의미.
    // 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈
    // number는 비유하자면 메모리에 이름을 붙인 것 (찰떡같이 알아들어서)
    // 나쁘지 않고 편리한데 원본 수정에 어려움이 있다.
 
    int number = 1;
 
    // TYPE* 변수이름;
    // 일단 2가지 요소
    // - TYPE
    // - *
 
    // 바구니는 바구니인데...
    // [주소를 저장하는 바구니다!]
    // 변수 선언할 때 * 등장했다 -> 포인터 = 주소
    // 참고) 포인터라는 바구니는 4바이트(32비트) or 8바이트(64비트) 고정 크기  // x86 -> 4바이트(32비트)?, x64 -> 8바이트(64비트)?  // 이거 확인해보자 by 나
 
    int* ptr = &number;
 
    // 근데 남의 주소를 갖고 뭘 하라는거지?
    // 추가 문법 : [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라!
    // *변수이름 = 값;
 
    // 포탈을 타고 순간이동 한다고 생각해보자
    // *이 여러번 등장하니 헷갈리는데, 사용 시점에 따라서 구분해서 기억하자
    // - 변수 선언(주소를 저장하는 바구니다)
    // - 사용할 때 (포탈 타고 순간이동)
 
    int value1 = *ptr;
    *ptr = 2;
 
    // TYPE은 왜 붙여줄까?
    // * = 포인터의 의미 = 주소를 저장하는 바구니 = 4 or 8바이트 고정 크기
 
    // 주소에 가면 뭐가 있는데?
    // ex) 결혼식 청첩장에 있는 주소 = 예식장 주소
    // ex) 명함에 있는 주소 = 회사 주소
    // * = 포인터 (주소 담는 바구니)
    
    // 0b101010101111
    int* ptrA;
 
    // 타입의 불일치
    __int64* ptr2 = (__int64*)&number;  // number 4바이트
    
    *ptr2 = 0xAABBCCDDEEFF;  // 0000AABB CCDDEEFF 4바이트 두개가 들어가버림. 포인트 사용시 유의해야함.
                            // 4바이트만 들어가야 되는데 8바이트 값으로 들어가 다른영역까지 덮어서 들어감.
 
    return 0;
}
cs

 

&hp로 hp의 주소 확인. 지역변수 hp주소. hp=1
hp=100(16진수로는 64)로 변경된다.

 

 

주소: &ptr2

 

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

[C++] 포인터 실습  (0) 2022.03.26
[C++] 포인터 연산  (0) 2022.03.25
[C++] 포인터 #1  (0) 2022.03.24
[C++] TextRPG  (0) 2022.03.24
[C++] 오버 로딩, 오버 로딩과 오버라이딩의 차이, 함수 마무리  (0) 2022.03.22