해결된 질문
작성
·
187
0
bool IsRareItem(Item* item)
{
return item->_rarity >= 2;
}
typedef bool(ITEM_SELECTOR)(Item* item);
Item* FindeItem(Item items[], int itemCount,
ITEM_SELECTOR* selector)
{
for (int i = 0; i < itemCount; i++)
{
Item* item = &items[i];
if (selector(item))
return item;
}
return nullptr;
}
함수 포인터 1에서 설명해 주실 때 제 컴퓨터에서 이상한 부분이 있어서 질문드립니다.
강의에는 selector의 주소가 IsRareItem의 주소를 가지고 있습니다.
하지만 저의 경우
selector는 0x004c15d7 이 주소를 가지고 있고(옆에 뜨는 바는 CPP_STUDY.exe!FindeItem ~~ 이런식으로 표기되고 있습니다)
IsRareItem 함수를 메모리에 찍어보면 0x004C76A0 이 주소를 가지고 있습니다
그 와중에 F11로 넘어가다 보면
if (selector(item))
return item;
여기 if 문에서 자연스럽게 IsRareItem 함수로 넘어가게 됩니다.
selector 와 IsRareItem 함수의 주소가 같아야 할 것 같은데 왜 달라도 작동하는지 궁금합니다.
2. 메모리 영역에서 코드 - 데이터 - 힙 - 스택영역중에 함수포인터를 배우고 보니
함수의 주소는 어디에 있는지 궁금해졌습니다. 데이터 영역에는 전역, static 변수의 주소와 값이 잡히고
스택영역에는 지역변수, return주소, 매개변수의 주소와 값이 잡힌다면
함수의 주소는 어느 영역에 있는건가요??? 코드 영역에 있는건가요?