指針函數和函數指針

今天看到一段代碼

 void *func(int a); 

我一開始沒反應過來,以爲是函數指針,但是再往下看的時候,我不淡定了

下面繼續寫,

void *func(int a)
{
    //-------
    ~~~~~~
    //------
}

這分明是函數的定義嘛!這纔想起是指針函數(返回指針的函數),其實這兩個概念大家都懂:函數指針本質上是一個指針,它可以用來指向一個函數;而指針函數表示的是一個返回指針的函數,本質上是個函數,定義不難,難的是它們的寫法太相似了,以至於容易混淆

比如說:

void * fun(int a);

相當於

int * fun(int a);
int  *x;
x = fun(55);


返回一個指針,至於什麼類型的指針,看*號前面是什麼,void* 表示函數返回一個指向任意類型的指針,int * 表示函數返回一個指向整型的指針

而下面是函數指針的定義:

int (*fun)(int a); 

真的極其的像,函數指針的定義僅僅是多了一個括號,函數指針的*號和名字是括在一起的,表一個指針,可以指向一個返回整型的函數,其參數列表爲(int a)

可以這樣使用

int (*p) (int a);
int  fun(int a)
{
    return a*2;
}
p = fun;


那麼,如果要使用fun函數(作用爲返回一個數的兩倍),可以這樣用

int  x = 8;

int  y ;

y = fun(x);

也可以:

y = (*p)(x);

這就是函數指針和指針函數的區別,快速記憶:函數指針的*號和名字被小括號括起來







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