函數指針的用法。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>



typedef int (*funtcb)(void);

int functa(void)
{
        printf("%s %d \n",__func__,__LINE__);
        return 0;
}

int add(int a, int b )
{
        int sum;
        typeof(sum) t;
        t = sum = a+b;
        printf("[%s %d] sum %d \n",__func__,__LINE__,a+b);
        return a+b;
}
int main(void)
{
        {
                funtcb p = functa;
                p();
        }
        {
                funtcb p2 = functa;
                (*p2)();
        }
        {
                funtcb pp = &functa;
                pp();
        }
        {
                funtcb p3 = &functa;
                (*p3)();
        }
        {
                void* pv = NULL;
                pv = functa;
                ((funtcb)pv)();
        }
        {
                void* pv2 = NULL;
                pv2 = add;
                (( int (*)(int, int)  )pv2)(3,3);
        }
        //typeof(一個函數的類型。
        {
                void* pv2 = NULL;
                pv2 = add;
                (( typeof(&add) )pv2)(3,3);
        }
        return 0;
}
[ test-function-point]$ gcc main.c
[ test-function-point]$ ./a.out
functa 12
functa 12
functa 12
functa 12
functa 12
[add 21] sum 6
[add 21] sum 6

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章