2 gonghong25 gonghong25 于 2014.12.02 09:37 提问

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

# 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

9个回答

mmzmagic
mmzmagic   2014.12.02 22:27

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

#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");
}

eagleyan
eagleyan   Rxr 2014.12.02 13:19

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

91program
91program   Ds   Rxr 2014.12.02 17:15

函数名,与数组名类似,是指针常量。如
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

wbz002
wbz002   2014.12.05 15:13

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

wbz002
wbz002   2014.12.05 15:13

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

u010988682
u010988682   2014.12.06 14:11

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

hxh88888888
hxh88888888   2015.01.07 17:09

LZ说的应该是递归调用吧

Rousp_
Rousp_   2017.12.07 17:57

#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");
}

CrystalGirl1
CrystalGirl1   2017.12.31 15:25

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!