[C++]_S5-02_Pointer

신치우·2025년 2월 9일

CPP

목록 보기
29/62
#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;

우리는 이제 함수를 이용하여 값을 수정할 수 있게 되었습니다.

profile
https://shin8037.tistory.com/

0개의 댓글