C语言,如何在一个函数内部,获取这个函数入口点的地址?

# Git@OSC 的 Android 和 iOS 客户端全面开源

include #include void show(void* p) { printf("%p\n",p); } int main() { show(&show); show(show); return 0; } Output: 1 2 0x8048480 0x8048480

void *p = show;
printf("p = 0X%8X\n", (int)p);

函数名,与数组名类似,是指针常量。如
TCHAR tcArray[100];
TCHAR *ptcPoint = tcArray;
TCHAR *ptcPoint2 = (TCHAR *)&tcArray;
TRACE("0x%X 0x%X 0x%X\r\n",tcArray,ptcPoint,ptcPoint2);
// 输入是相同的: 0x12EDBC 0x12EDBC 0x12EDBC

答案处处有.
函数名称就是入口地址。

#include

static unsigned int PFN_ARR[100] = { 0 };

void fun1(void);
void fun2(int a);

int main()
{
void (*pfn_fun1)();
fun1();
fun2(5);

pfn_fun1= (void(*)())(PFN_ARR[0]);
pfn_fun1();
getchar();
return 0;

}

void fun1(void)
{
void (*pfn)(void) = fun1;
unsigned int fun_addr = (unsigned int)pfn;
PFN_ARR[0] = fun_addr;
printf("fun1\n");
}

void fun2(int a)
{
void (*pfn)(int) = fun2;
unsigned int fun_addr = (unsigned int)pfn;
PFN_ARR[1] = fun_addr;
printf("fun2\n");
}

void fun(){
printf("函数fun的地址 = %x", fun);
}

void show(){
printf("函数fun的地址 = %p", show);
}

LZ说的应该是递归调用吧

#include

static unsigned int PFN_ARR[100] = { 0 };

void fun1(void);
void fun2(int a);

int main()
{
void (*pfn_fun1)();
fun1();
fun2(5);

pfn_fun1= (void(*)())(PFN_ARR[0]);
pfn_fun1();
getchar();
return 0;
}

void fun1(void)
{
void (*pfn)(void) = fun1;
unsigned int fun_addr = (unsigned int)pfn;
PFN_ARR[0] = fun_addr;
printf("fun1\n");
}

void fun2(int a)
{
void (*pfn)(int) = fun2;
unsigned int fun_addr = (unsigned int)pfn;
PFN_ARR[1] = fun_addr;
printf("fun2\n");
}

函数名 是程序在执行时, 函数所占内存单元块的 首地址 的别称。