[C++] 포인터 연산
포인터 연산
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
포인터 연산의 종류
1) 주소 연산자 (&)
2) 산술 연산자 ( + - )
3) 간접 연산자 ( * )
4) 간접 멤버 연산자 ( -> )
1. 주소 연산자 (&)
포인터는 [주소를 담는 바구니]
- 해당 변수의 주소를 알려준다.
- 더 정확히 말하면 해당 변수 타입(TYPE)에 따라서 TYPE* 반환
2. 산술 연산자 ( + - )
number = number + 1;
number++;
++number;
number += number;
pointer = pointer + 1;
pointer++;
++pointer;
pointer += 1;
int*
- *
- 포인터 타입이네! (4 or 8바이트) 주소를 담는 바구니!
- 64비트 프로그램 : 8바이트, 86비트 프로그램 : 4바이트
- int
- 주소를 따라가면 int(4바이트 정수형 바구니)가 있다고 가정해라!
포인터에서 +나 - 등 산술 연산으로 1을 더하거나 빼면, 정말 '그 숫자'를 더하고 빼라는 의미가 아니다.
한번에 TYPE의 크기만큼을 이동하라!
다음/이전 바구니로 이동하고 싶다 << [바구니 단위]의 이동으로
즉, 1을 더하면 = 바구니 1개 이동시켜라. 3을 더하면 = 바구니 3개 이동시켜라
3. 간접 연산자 ( * )
포탈을 타고 해당 주소로 이동한다. ex. (*playerPtr).hp = 200;
4. 간접 멤버 연산자 ( -> )
* 간접 연산자
- 포탈 타고 해당 주소로 이동
. 구조체의 특정 멤버를 다룰 때 사용
- 어셈블리 언어로 까보면 사실상 그냥 덧셈
->
- ->는 *와 .를 한방에 해결
(*playerPtr).hp = 200;
(*playerPtr).damage = 200;
playerPtr->hp = 200;
playerPtr->damage = 200;
어셈블리 코드로 확인해보면 위와 아래는 완전히 동일하다.
전체 코드
더보기
#include <iostream>
using namespace std;
struct Player
{
int hp; // +0
int damage; // +4
};
int main()
{
int number = 1;
// 1) 주소 연산자 (&)
// - 해당 변수의 주소를 알려주세요~
// - 더 정확히 말하면 해당 변수 타입(TYPE)에 따라서 TUYPE* 반환
int* pointer = &number;
// 2) 산술 연산자 (+ -)
number += 1; // 1 증가했다 (!)
pointer += 1; // 4 증가했다 (?) 다음 바구니로 이동했다는 의미. int형이 4바이트이기 때문에 4만큼 증가했다.
// 3) 간접 연산자 (*)
// - 포탈을 타고 해당 주소로 슝~ 이동
number = 3;
*pointer = 3;
Player player;
player.hp = 100;
player.damage = 10;
Player* playerPtr = &player;
(*playerPtr).hp = 200;
(*playerPtr).damage = 200;
// 4) 간접 멤버 연산자 (->)
playerPtr->hp = 200;
playerPtr->damage = 200;
return 0;
}
'⭐ Programming > C++' 카테고리의 다른 글
[C++] 참조 기초 (0) | 2022.03.26 |
---|---|
[C++] 포인터 실습 (0) | 2022.03.26 |
[C++] 포인터 #2 (0) | 2022.03.25 |
[C++] 포인터 #1 (0) | 2022.03.24 |
[C++] TextRPG (0) | 2022.03.24 |
댓글
이 글 공유하기
다른 글
-
[C++] 참조 기초
[C++] 참조 기초
2022.03.26 -
[C++] 포인터 실습
[C++] 포인터 실습
2022.03.26 -
[C++] 포인터 #2
[C++] 포인터 #2
2022.03.25 -
[C++] 포인터 #1
[C++] 포인터 #1
2022.03.24