나는 함수 포인터의 값을 볼 수함수의 포인터에 항상 포인터가 표시되는 이유는 무엇입니까?
#include <iostream>
using namespace std;
void foo() {
void (*fooptr) (void) = foo;
cout << fooptr << endl;
}
int main() {
void (*fooptr) (void) = foo;
foo();
return 0;
}
내 의도처럼 뭔가를하려고하고 있어요. main()
함수에있는 함수의 주소를 찾으면 함수가 호출되지 않는다는 것을 이해할 수 있습니다. 함수 호출 스택에 메모리가 할당되지 않았을 수 있습니다. 그러나 함수를 호출하고 포인터의 값을 확인하려고 할 때. 여전히 동일한 결과 인 1
을 보여줍니다. 설명이 뭐야? 호출 된 함수 자체의 주소가 인쇄되지 않을 수 있습니다. 우리가 수업에서 가지고있는 것처럼 this
과 같은 포인터가 있습니까? 그래서 우리는 그 자체의 주소를 볼 수 있습니까?
가능한 복제본 : http://stackoverflow.com/q/2064692/395718 – Dialecticus
tl; dr :'fooptr'을'void * '로 캐스트하십시오. 작동하지 않는 경우 운이 좋지 않으면 ... – Dialecticus
함수 포인터가 함수 호출에서 사용하는 스택 프레임에 대한 포인터가 아니며 함수 코드에 대한 포인터입니다 – Manu343726