Notice
Recent Posts
Recent Comments
Link
오븐 노트
[C++] 포인터 기초 #1 본문
#include <iostream>
using namespace std;
int main()
{
// 지금까지 사용한 방식
// number라는 이름의 4바이트 정수 타입의 바구니를 만든다
// number라는 변수 스택 메모리에 할당
// number = 1이라 함은, number 바구니에 1이라는 숫자를 넣으라는 의미
// 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈
// number는 비유하자면 메모리에 이름을 붙인 것
// 단점은 TextRPG 원본 수정
// 특정 메모리를 강제로 조작할 수 있게 만들어 주는 수단이 포인터.
int number = 1;
// TYPE* 변수이름;
// 2가지 요소
// - TYPE
// - *
// 바구니는 바구니이지만
// [주소를 저장하는 바구니]
// 변수 선언할 때 * 등장 -> 포인터 = 주소
// ex) 포인터라는 바구니는 운영체제에 따라 8바이트(64비트) or 4바이트(32비트) 고정 크기
// number의 주소값을 ptr이라는 포인터 변수(주소)에 저장
// assembly => lea eax, [number]
// assembly => number의 주소값을 eax에 입력하라는 명령
// assembly => mov dword ptr [ptr], eax
// assembly => eax에 입력된 값을 dword(32비트 기준 4바이트) ptr의 주소에 입력하라는 명령
int* ptr = &number;
// 추가 문법 : [주소를 저장하는 바구니]가 가리키는 주소로 가서 무언가를 해라
// *변수이름 = 값;
// 사용 시점에 따라서 구분하여 기억
// - 변수 선언(주소를 저장하는 바구니 선언)
// - 사용할 때(포인터 변수(주소)에 저장된 주소값으로 이동하여 저장된 값을 적용)
// assembly => mov eax, dword ptr [ptr]
// assembly => ptr의 주소값을 eax 레지스터에 저장
// assembly => mov ecx, dword ptr [eax]
// assembly => eax의 주소값을 ecx 레지스터에 저장
// assembly => mov dword ptr [value1], ecx
// assembly => ecx 레지스터의 값을 value1의 주소에 저장
int value1 = *ptr;
// assembly => mov eax, dword ptr [ptr]
// assembly => ptr의 주소값을 eax 레지스터에 저장
// assembly => mov dword ptr [eax], 2
// assembly => eax의 주소에 2를 저장
*ptr = 2;
return 0;
}
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.
모든 글은 제가 공부하기 위해 작성합니다.
'Develop > C++' 카테고리의 다른 글
[C++] 포인터 연산 (0) | 2022.07.01 |
---|---|
[C++] 포인터 기초 #2 (0) | 2022.07.01 |
[C++] TextRPG #2 (구조체) (0) | 2022.06.28 |
[C++] TextRPG #1 (포인터 X, 기초) (0) | 2022.06.15 |
[C++] 함수 마무리 (오버로딩, 기본 인자값, 스택 오버플로우) (0) | 2022.06.12 |