C語言 函式指標

2021-07-10 06:16:40 字數 1902 閱讀 5007

目錄

1. 指標

2. 函式指標的定義

2.1 原始定義     

2.2 巨集定義

2.3 型別重定義

3.函式指標應用舉例

3.1 定義與實現

3.2 函式指標_返回值、形參、型別強轉

指標是c語言的精髓,熟練的操作指標可以讓我們更容易實現所需要的功能。函式指標是指標中比較特殊的。因此這裡做如下總結,如有紕漏還望各位大俠指正。

int (*func)(int, int);
上面的**是乙個簡單的函式指標的定義。其含義如下:

1> 第乙個int: 函式返回值型別是整型;

2> 第

二、三個int: 加上外面的括號是這類函式的形參表,這裡函式的形參表是兩個整型數;

3> func : 定義的指標的名字,它可以指向任何乙個滿足其返回值和形參表要求的函式。

c語言中的巨集定義通常採用#define, 目的是讓變數等表達的含義更清楚和簡捷。

#define my_dbg_print(a, b) (*func)(a, b)
以上是對函式指標func實現的巨集定義。

c語言中經常使用型別重定義typedef來簡化**的書寫。

typedef int(*dbg)(int, int);
這樣我們就能使用dbg來定義指向這類函式的指標了。

下面我們定義乙個簡單的格式化輸出函式:

//列印輸出函式

int my_print(int a, int b)

int (*func)(int, int);//原始定義

typedef int(*dbg)(int, int);//型別重定義

#define my_dbg_print(a, b) (*func)(a, b)//巨集定義

int main()

1> 函式指標做返回值:

int(*my_func(char a))(int, int);
這裡定義了乙個函式,函式名為my_func,函式的形參是乙個字元型變數a,函式的返回值是乙個函式指標,這個指標的型別和前面定義的dbg型別一致。這裡其實就可以體現型別重定義的好處。如果採用dbg這個型別重定義,那麼和上面等價的定義方式如下:

dbg my_func(char a);
2> 函式指標做形參

int get_func(int(*)(int, int));
上面的**定義了乙個函式,函式名為get_func,返回值是整型,形參是乙個函式指標,這個指標的型別與上面定義的dbg型別一致。同樣如果採用重定義後,這個函式定義可以簡化為:

int get_func(dbg);
3> 強制型別轉換

有些函式為了統一介面返回的指標通常是void*型,由使用者來判斷實際指標型別,比如void *dlsym(oid* handle, const char * symbol)函式就可以通過控制代碼和連線符獲取動態鏈結庫中的函式名或變數名可以看出該函式的返回值就是void *指標型別,這時候就要進行型別強制轉換,假設我們要從動態鏈結庫中獲取my_print這個函式,就應該編寫如下**:

int(*func)(int, int) = (int(*)(int, int))dlsym(handle, "my_print");
採用型別重定義後**可簡捷的寫為:

dbg func = (dbg)dlsym(handle, "my_print");
現在能想到的就這麼多,如果有什麼錯誤,還請讀者批評指正。

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

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

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

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

c語言函式指標與指標函式

include include include using namespace std 1 c語言函式指標 解釋 這是一種很特殊的指標,它的指向是乙個函式的入口 作用 該指標可以接受乙個函式的位址,代表這個函式執行函式的操作 函式指標舉例 下面是乙個函式指標pfunc,它只能指向返回值為float,...