작성
·
183
0
void* pointer = malloc (sizeof (Monster));
Monster& m1 = *( ( Monster* ) pointer );
m1._hp = 100;
m1._attack = 10;
m1._mp = 5;
free (pointer);
이런식으로 해도 작동이 되는데 혹시 제가 이해한게 맞는건지 정확하게 이해 한듯 느낌이 팍 왔는데 확인할 방법이 없어서 이렇게 질문드려봅니다
일단 pointer 이부분이 반환값이 void 형 주소값을 반환받는건데 Monster 이부분은 클레스 타입이므로
Monster클레스 타입의 주소값을 Monster*로 포인터를 만들어 줬는데 이 주소값과 pointer 주소값이 서로 만들어진 형식이 한쪽은 void 고 한쪽은 class 이므로
Monster* m1 = (Monster*) pointer 이런식으로 하는이유가
pointer 가 void 형식의 주소값인건 아는데 지금은 Monster*값을 쓸꺼야 하고 괄호를 열어서 (Monster*)이라는걸로 확인시켜 줬기 때문에
Monster* m1에 정상적으로 이식이 된거고
여기서
참조 형태로 바꾸고 싶어서
Monster& m1으로 바꿨으니 void로 주소값을 반환 하는 pointer 가 참조형태로 탈바꿈? 하기 위해서 앞에 *을 하나 더 찍는방식으로 참조 타입으로 이식 됬다 라고 판단 되는데 그럼 처음 답변해주셨던 (Monster&)*((Monster*)pointer ) 이분부분에서 굳이 (Monster&)이부분은 삭제해도 어차피 (Monster*)이부분에서 class 탑입으로 바꾸겠다고 했으니 생략이 가능한게 아닌지 위에 코드도 동일하게 주소랑 값들이 다 나오는데 혹시 제가 착각하고 있는게 있는지 ......아니면 정상적으로 제가 생각한게 맞는지 궁금합니다 ㅠㅠ
질문이 길어져서 죄송합니다 열심히 공부해서 꼭 게임한번 만들어 보고 싶어서 문법 열심히 공부하는데 시골이라 학원도 없고 오직 온라인으로 밖에 공부할수 없는 이 슬픈 현실이 너무 절 괴롭게 합니다 ..... 소중한 시간을 항상 내주시는거에 대해 정말 감사드립니다
답변 2
1
아니면 정상적으로 제가 생각한게 맞는지 궁금합니다 ㅠㅠ
네 정상적으로 생각하셨습니다. (Monster&)는 생략해도 됩니다.
잘 이해하셨는데 너무 스트레스를 받으시는군요 ㅎㅎ
하긴 포인터가 원래 좀 그렇긴 합니다.
원리를 알고 보면 굉장히 단순한건데~
처음 배울 땐 왜케 어려웠는지(?) 저도 모르겠네요.
위로의 차원에서 한 마디 드리자면,
저도 대학생 때는 포인터랑 C++이 너무 어려워서
(C++ = 뭐만 하면 크래시 나는 짜증나는 녀석)
코딩에 흥미를 잃고 대학교 과제만 깨작 깨작 제출하고 지내다가
대학원 때 와서 우연히 필요에 의해 게임 개발 공부를 하면서
다시 본격적으로 시작하게 되었습니다.
나이로 치면 28때 시작한거니, 아마 지금 시작하시더라도 저보다는 훨씬 빠르실거에요.
차근차근 하시면 뜻하시는 바를 이룰 수 있을거라 봅니다.
그리고 사실 학원이라고 해도 별거 없어요..
공부는 다 혼자 하는겁니다 화이팅
0