指標函式和函式指標 附例項詳解

2021-07-10 15:19:06 字數 2958 閱讀 5903

今天遇到指標函式和函式指標的問題,就直接把它徹底地分析了一遍,總結如下:

指標函式與函式指標表示方法的不同,千萬不要混淆。最簡單的辨別方式就是看函式名前面的指標*號有沒有被括號()包含,如果被包含就是函式指標,反之則是指標函式。

主要的區別是乙個是指標變數,乙個是函式。在使用是必要要搞清楚才能正確使用。

1、

指標函式

:帶指標的函式,即本質是乙個函式。函式返回型別是某一型別的指標

型別識別符號 *函式名(參數列)     int *f(x,y);

首先它是乙個函式,只不過這個函式的返回值是乙個位址值。指標函式一定有函式返回值,而且在主調函式中,函式返回值必須賦給同型別的指標變數。

例如:

float *fun();

float *p;

p = fun( );

當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中。

由於返回的是乙個位址,所以型別說明符一般都是int。

int  *f(int a, int b);

上面的函式宣告又可以寫成如下形式:

int*  f(int a, int b);

讓指標標誌 * 與int緊貼在一起,而與函式名f間隔開,這樣看起來就明了些了,f是函式名,返回值型別是乙個int型別的指標。

例如:

int *f(int a, int b); // 宣告指標函式 

int main(int argc, char* argv)

/*指標函式的定義,返回值是指標型別int */

int *f(int a, int b)

通過執行結果,可以看出,指標函式f返回的型別是乙個指標型別,因為f是賦值給int型別指標p1的,如果不是指標型別,編譯就會出錯。

從上圖的執行結果可以看出,指標函式f的返回值p和f賦值給的指標p1的位址是相同的,都是指向指標函式內部申請的記憶體位址0x3b88d0。

所以,指標函式就是返回乙個位址給呼叫者,用於需要位址的情況。

2、

函式指標:指向

函式(首位址)

的指標變數,即本質是乙個指標變數。

函式指標說的就是乙個指標,但這個指標指向的函式,不是普通的基本資料型別或者類物件。

指向函式的指標包含了函式的位址,可以通過它來呼叫函式。

宣告格式:型別說明符

(*函式名

)(引數

)其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向乙個返回整型值的函式。指標的宣告必須和它指向函式的宣告保持一致。

指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了乙個返回整型指標的函式的原型宣告。

int (*f)(int a, int b); // 宣告函式指標

當然,函式指標的返回值也可以是指標。

上面的函式指標定義為乙個指向乙個返回值為整型,有兩個引數並且兩個引數的型別都是整型的函式。

下面是利用函式指標分別求兩個整數的最大值和最小值的用法。

/* 求最大值,返回值是int型別,返回兩個整數中較大的乙個*/

int max(int a, int b)

/* 求最小值,返回值是int型別,返回兩個整數中較小的乙個*/

int min(int a, int b)

int(*f)(int, int); // 宣告函式指標,指向返回值型別為int,有兩個引數型別都是int的函式

例如:void (*fptr)();把函式的位址賦值給函式指標,可以採用下面兩種形式:

fptr=&function;

fptr=function;

取位址運算子&不是必需的,因為單單乙個函式識別符號就標號表示了它的位址,如果是函式呼叫,還必須包含乙個圓括號括起來的參數列。

可以採用如下兩種方式來通過指標呼叫函式:

x=(*fptr)();

x=fptr();

第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。下面舉乙個例子:

void (*funcp)();

void filefunc(), editfunc();

int main()

void filefunc()

void editfunc()

程式輸出為:filefunc   editfunc建議看看:指標陣列和陣列指標的區別

指標函式,函式指標,指標的指標 詳解

1 指標函式是指帶指標的函式,即本質是乙個函式。函式返回型別是某一型別的指標 型別識別符號 函式名 參數列 int f x y 首先它是乙個函式,只不過這個函式的返回值是乙個位址值。函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函式返回值必須賦給同型...

函式指標例項

1.定義 每乙個函式都占用一段記憶體單元,它們有乙個起始位址,指向函式入口位址的指標稱為函式指標。2.語法 指向函式的指標變數的一般定義形式為 資料型別 指標變數名 參數列 3.說明 1 函式指標的定義形式中的資料型別是指函式的返回值的型別。2 區分下面兩個語句 int p int a,int b ...

函式指標 函式指標陣列和指標函式

1.函式指標 這個指標返回乙個函式 int f int x 宣告乙個函式指標 f func 將func函式的首位址賦給指標f 2.函式指標陣列 這個指標返回一組函式 include stdio.h void function0 void void function1 void void functi...