[C++] 포인터 #1
포인터
인프런 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 |
댓글
이 글 공유하기
다른 글
-
[C++] 포인터 연산
[C++] 포인터 연산
2022.03.25 -
[C++] 포인터 #2
[C++] 포인터 #2
2022.03.25 -
[C++] TextRPG
[C++] TextRPG
2022.03.24 -
[C++] 오버 로딩, 오버 로딩과 오버라이딩의 차이, 함수 마무리
[C++] 오버 로딩, 오버 로딩과 오버라이딩의 차이, 함수 마무리
2022.03.22