天天看點

C如何使用固定位址來通路函數

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

繼續閱讀