# Git@OSC 的 Android 和 iOS 客户端全面开源
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");
}
函数名 是程序在执行时, 函数所占内存单元块的 首地址 的别称。