C語言 函式指標和指標函式的用法和區別

2021-10-07 05:48:35 字數 1956 閱讀 1671

1. 簡介

本文主要介紹指標函式和函式指標的定義和區別。

2 指標函式

2.1 定義

指標函式,其本質是乙個函式,該函式的返回值是乙個指標。

宣告格式為:*型別識別符號 函式名(參數列)

簡單函式宣告:

int f(int x,int y);
該函式的返回值是 int 型別。

指標函式宣告:

int *f(int x,int y);
該函式為指標函式,其返回值是乙個int 型別的指標,是乙個位址。所謂的指標函式也沒什麼特別的,和普通函式對比不過就是其返回了乙個指標(即位址值)而已。

2.2 示例

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

int main() /*

* 指標函式的定義

* 返回值是指標型別int *

*/int *f(int a, int b)

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

下面是執行結果:

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

3 函式指標

3.1 定義

函式指標,其本質是乙個指標變數,該指標指向這個函式。

宣告格式:型別說明符 (*函式名) (引數)

如下:

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

fun = function;

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

呼叫函式指標的方式也有兩種:

x = (*fun)();

x = fun();

兩種方式均可,其中第二種看上去和普通的函式呼叫沒啥區別,建議使用第一種,因為可以清楚的指明這是通過指標的方式來呼叫函式。

3.2 示例

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

/*

* 求最大值

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

*/int max(int a, int b) /*

* 求最小值

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

*/int min(int a, int b)

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

int _tmain(int argc, _tchar* ar**)

4 二者區別

通過以上的介紹,應該都能清楚的理解其二者的定義。那麼簡單的總結下二者的區別:

4.1 定義不同

指標函式本質是乙個函式,其返回值為指標。

函式指標本質是乙個指標,其指向乙個函式。

4.2 寫法不同

指標函式:int* fun(int x,int y);

函式指標:int (*fun)(int x,int y);

4.3 用法不同

用法不同已經寫了詳細示例。

總而言之,這兩個東西很容易搞混淆,一定要深入理解其兩者定義和區別,避免犯錯。

C語言 指標函式和函式指標

指標函式和函式指標 指標函式其實是乙個簡稱,是指帶指標的函式,它本質上是乙個函式,只是返回的是某種型別的指標。其定義的格式為 型別識別符號 函式名 參數列 函式指標,從本質上說是乙個指標,只是它指向的不是一般的變數,而是乙個函式。因為每個函式都有乙個入口位址,函式指標指向的就是函式的入口位址。其定義...

C語言 指標函式和函式指標

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

C語言的指標函式和函式指標的區別和用法例項

簡單的來說,就是乙個返回型別是指標的函式,其本質是乙個函式,而該函式的返回值是乙個指標。乙個函式可以返回乙個整型值 字元值 實型值等,也可以返回指標型的資料,即位址 宣告格式為 型別識別符號 函式名 參數列 int fun int x,int y 這種函式返回值是乙個 int 型別,是乙個數值。in...