오븐 노트

[C++] 포인터 연산 본문

Develop/C++

[C++] 포인터 연산

오 븐 2022. 7. 1. 07:45
#include <iostream>
using namespace std;

// 1) 주소 연산자 (&)
// 2) 산술 연산자 (+ -)
// 3) 간접 연산자 (*)
// 4) 간접 멤버 연산자

struct Player
{
	int hp; // 주소값 + 0
	int damage; // 주소값 + 4
};

int main()
{
	int number = 1;

	// 1) 주소 연산자 (&)
	// - 해당 변수의 주소를 알려달라
	// - 더 정확히 말하면 해당 변수 타입(TYPE)에 따라서 TYPE* 반환
	int* pointer = &number;

	// 2) 산술 연산자 (+ -)
	number += 1; // 1 증가

	// 포인터에서 +나 -등 산술 연산으로 1을 더하거나 빼면,
	// 한번에 TYPE 만큼의 주소를 입력한 숫자 만큼 이동하라는 명령
	// 64비트 운영체제 기준 8 * number
	pointer += 1; // 4 증가

	// 3) 간접 연산자 (*)
	number = 3; // number의 값을 3으로 저장하라
	*pointer = 3; // 포인터 변수에 저장되어 있는 주소값으로 이동하여 3을 저장하라

	// 4) 간접 멤버 연산자 (->)
	// * 간접 연산자 (해당 주소로 이동)
	// . 구조체의 특정 멤버를 다룰 때 사용 (어셈블리 언어로 열어보면 .은 사실상 단순한 덧셈)
	// ->는 *와 .를 한번에 처리하는 연산자
	Player player;
	player.hp = 100;
	player.damage = 10;

	Player* playerPtr = &player;
	(*playerPtr).hp = 200;
	(*playerPtr).damage = 200;
	// 위 아래 완전히 같은 의미, 동작, 연산
	playerPtr->hp = 200;
	playerPtr->damage = 200;

	return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

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

[C++] 참조 기초  (0) 2022.07.10
[C++] 포인터 실습  (0) 2022.07.05
[C++] 포인터 기초 #2  (0) 2022.07.01
[C++] 포인터 기초 #1  (0) 2022.06.30
[C++] TextRPG #2 (구조체)  (0) 2022.06.28