指針函數,顧名思義,是一個函數,隻不過這個函數的返回值為一個指針即返回的值為一個地址。
申明格式為:*類型标識符 函數名(參數表)。如:
int* fun(int x,int y);
我習慣把int和*寫在一起,其實這樣也更便于理解,fun為我們定義的一個函數,可傳入兩個int型的參數,這個函數的返回值為一個int型的指針。
來看一個demo:(求兩個數的和)
sum這個函數的返回值為U8類型的指針即為一個U8類型的地址,c這個内存空間中存放的是輸入的兩個數的和,p為一個指針,存放的為存放兩個數的和的存儲空間的地址,将p返回即返回的為一個指針,在主函數中,重新定義的p為一個指針,該指針指向sum函數,*P為該地址中存放的值。
函數指針函數指針,顧名思義,這是一個指針,隻不過這個指針是一個指向一個函數入口的指針。
聲明格式:類型說明符 (*函數名) (參數)。如:
int (*fun)(int x,int y);
這是一個int型的指針,該指針指向的地址為一個函數的首地址即函數入口地址,該函數有兩個形參。這個*是修飾這個函數的,故和fun寫在一起,用括号括起來。
來看一個demo:(求兩個數的和)
定義一個普通的求和函數add,在主函數裡面定義一個函數指針,将該函數指針指向add函數,在傳入實參,進行的也是求和運算了。其實函數指針也就是c 裡面多态的理論基礎了。
簡單總結一下函數指針和指針函數:
函數指針:是一個指針,該指針指向函數的入口地址
指針函數:是一個函數,該函數的返回值為指針類型
,