#include "stdafx.h"
#include "stdio.h"
int add(int a,int b)
{
return a+b;
}
int main(int argc, char* argv[])
{
//直接地址
int c=((int (*)(int,int))4198405)(1,2);
printf("%d\n",c);
//声明一个相同类型的变量
int (*ad)(int,int);
ad=add;
printf("%d\n",ad(1,2));
return 0;
}
解释:printf(“%d”,add); add的物理地址为 4198405;
我直接通过访问地址,而不是函数变量add。
我曾在c陷阱与缺陷中看过(*(void(*)())0)()这样的式子;void(*)()指向返回值为viod类型的函数的指针。(http://www.nowamagic.net/librarys/veda/detail/2020)
提示 printf(“%d %d”,add,&add); 他们的只是一样的,也就是说add本身就是一个地址,指针。