函数的本质是一段可执行性的代码,函数名则指向这段代码的首地址,函数名实际上就是一个存储可函数入口地址的常量,即func == &func;
void func()
{
printf("china\n");
}
int main()
{
printf("%#p\n",func); //函数名的本质是一个地址
void(*p)() = func;
p();
(*p)();
//func = 0x12345678; //常量不能做左值
printf("p = %#p,*p=%#p\n",p.*p);
if(*p == p && *p == func && *p == &func && *p == *func)
printf("same\n");
return 0;
}
解析:对于函数指针p 指向函数func的入口地址,而func里面存的就是函数的入口地址,所以*p == func。