[C++] 포인터 #2
포인터
인프런 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 |
주소: &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 |
댓글
이 글 공유하기
다른 글
-
[C++] 포인터 실습
[C++] 포인터 실습
2022.03.26 -
[C++] 포인터 연산
[C++] 포인터 연산
2022.03.25 -
[C++] 포인터 #1
[C++] 포인터 #1
2022.03.24 -
[C++] TextRPG
[C++] TextRPG
2022.03.24