#include <iostream>
using namespace std;
// 오늘의 주제 : 포인터
void SetHp(int *hp)
{
*hp = 100;
}
int main()
{
int hp = 1;
SetHp(&hp);
cout << "hp :" << hp << endl;
// 지금까지 사용한 방식
// number 라는 이름의 4바이트 정수 타입의 바구니를 만든다
// number라는 변수 --> 스택 메모리에 할당
// number = 1 --> number라는 바구니에 1이라는 숫자를 넣는다는 의미
// 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈
// number는 비유하자면 메모리에 이름을 붙인 것
int number = 1;
// Type* 변수이름;
// 2가지 요소
// - Type
// - *
// 바구니는 바구니인데..
// [주소를 저장하는 바구니다!]
// 변수 선언할 때 * 등장했다 -> 포인터 = 주소
// 참고) 포인터라는 바구니는 4바이트(32비트) or 8바이트(64비트) 고정 크기
int* ptr = &number;
// 근데 남의 주소를 갖고 뭘 하라는거지?
// 추가 문법 : [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라!
// *변수이름 = 값;
// * -> 포탈을 타고 순간이동 한다고 생각
// *이 여러번 등장하니 헷갈리넨드, 사용 시점에 따라서 구분해서 기억하자
// - 변수 선언 (주소를 저장하는 바구니)
// - 사용할때 (포탈을 타고 순간이동)
int value1 = *ptr;
*ptr = 2;
// Type 은 왜 붙여줄까?
// * = 포인터의 의미 = 주소를 저장하는 바구니 = 4 or 8 바이트 고정 크기
// 포인터에 대한 추가정보를 줌
// 타입의 불일치
__int64* ptr2 = (__int64*)&number;
*ptr2 = 0xAABBCCDDEEFF;
return 0;
}
int number로 선언되어있었기 때문에 __int64* 와 타입이 불일치 하여 아래와 같은 에러가 발생함

이를 해결하기 위하여 (__int64*) 로 캐스팅을해줌

그러면 이제 아래와 같은 이슈가 발생하게됨 기존의 4바이트의 영역을 넘어 bbaa가 저장되게됨

아래와 같이 값도 튀어버리는 현상이 생김

따라서 자료형의 크기도 잘 염두해서 사용해야함
Text RPG에서 의 문제를 해결하기 위한 부분
void SetHp(int *hp)
{
*hp = 100;
}
int main()
{
int hp = 1;
SetHp(&hp);
cout << "hp :" << hp << endl;
우리는 이제 함수를 이용하여 값을 수정할 수 있게 되었습니다.