Inflearn Community Q&A
함수 포인터 #1에서 질문
Resolved
Written on
·
200
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주소, 매개변수의 주소와 값이 잡힌다면
함수의 주소는 어느 영역에 있는건가요??? 코드 영역에 있는건가요?
Answer 2
1
1.
디버깅하면서 볼 때 가끔 이상하게 나오는 경우가 있으니
[정리]를 한 번 하고 다시 빌드해서 다시 살펴보시기 바랍니다.
그리고 설명으로는 잘 와닿지가 않는데 selector에 (IsRareItem으로 설정했음에도)
다른 주소가 있다는걸까요?
테스트하면서 스샷 첨부해주시면 감사하겠습니다.
2.
함수의 주소라는 곳으로 가면 실행할 코드들이 잔뜩 있으니
코드 영역이 맞습니다.
0




