#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本身就是一個位址,指針。