今天看到一段代碼
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);
這就是函數指針和指針函數的區別,快速記憶:函數指針的*號和名字被小括號括起來