typedef 函式指標的用法

2021-06-02 20:41:31 字數 3635 閱讀 9779

在網上搜尋函式指標,看到乙個例子。開始沒看懂,想放棄,可是轉念一想,這個用法遲早要弄懂的,現在多花點時間看懂它,好過以後碰到了要再花一倍時間來弄懂它。其實很多時候都是這樣,如果每次到難一點的內容,總想著下次我再來解決它,那就永遠也學不到東西。

後面那個例子加了注釋,是我對這種用法的理解,希望對新手有所幫助。

進入正文:

**簡化, 促進跨平台開發的目的.

typedef 行為有點像 #define 巨集,用其實際型別替代同義字。

不同點:typedef 在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文字替換

用法一:

typedef

int(*myfun)(int, int);

這種用法一般用在給函式定義別名的時候

上面的例子定義myfun

是乙個函式指標, 函式型別是帶兩個int 引數, 返回乙個int

分析這種形式的定義的時候可以用下面的方法:

先去掉typedef 和別名,剩下的就是原變數的型別.

去掉typedef和myfun以後就剩:

int (*)(int, int)

用法二:

typedef給變數型別定義乙個別名.

typedefstructmy_type;

這裡把乙個未命名結構直接取了乙個叫my_type的別名, 這樣如果你想定義結構的例項的時候就可以這樣:

my_type tmp;

第二種用法:typedef原變數型別別名

簡單的函式指標的用法

//形式1:返回型別(*函式名)(參數列)

char(*pfun)(int);

//typedefchar(*pfun)(int)   //跟上一行功能等同

/*typedef的功能是定義新的型別。第一句就是定義了一種ptrfun的型別,並定義這種型別為指向某種函式的指標,這種函式以乙個int為引數並返回char型別。*/

char glfun(int a)

void main()

pfun =glfun;

(*pfun)(2);

第一行定義了乙個指標變數pfun.它是乙個指向某種函式的指標,這種函式引數是乙個int型別,返回值是char型別。只有第一句我們還無法使用這個指標,因為我們還未對它進行賦值

第二行定義了乙個函式glfun().該函式正好是乙個以int為引數返回char的函式。我們要從指標的層次上理解函式-函式的函式名實際上就是乙個指標函式名指向該函式的**在記憶體中的首位址

下面是乙個例子:

c**

//#include

#include

typedef

int(*fp_calc)(int,int);   

//注意這裡不是函式宣告而是函式定義,它是乙個位址,你可以直接輸出add看看

intadd(inta,intb)   

intsub(inta,intb)   

intmul(inta,intb)   

intdiv(inta,intb)   

//定義乙個函式,引數為op,返回乙個指標。該指標型別為 擁有兩個int引數、

//返回型別為int 的函式指標。它的作用是根據操作符返回相應函式的位址

fp_calc calc_func(charop)   

returnnull;   

}   

//s_calc_func為函式,它的引數是 op,

//返回值為乙個擁有 兩個int引數、返回型別為int 的函式指標

int(*s_calc_func(charop)) (int,int)   

//終端使用者直接呼叫的函式,該函式接收兩個int整數,和乙個算術運算子,返回兩數的運算結果

intcalc(inta,intb,charop)   

voidmain()   

//#include#includetypedef int (*fp_calc)(int, int);

//注意這裡不是函式宣告而是函式定義,它是乙個位址,你可以直接輸出add看看

int add(int a, int b)

int sub(int a, int b)

int mul(int a, int b)

int div(int a, int b)

//定義乙個函式,引數為op,返回乙個指標。該指標型別為 擁有兩個int引數、

//返回型別為int 的函式指標。它的作用是根據操作符返回相應函式的位址

fp_calc calc_func(char op)

return null;

}//s_calc_func為函式,它的引數是 op,

//返回值為乙個擁有 兩個int引數、返回型別為int 的函式指標

int (*s_calc_func(char op)) (int, int)

//終端使用者直接呼叫的函式,該函式接收兩個int整數,和乙個算術運算子,返回兩數的運算結果

int calc(int a, int b, char op)

void main()

執行結果

calc(100, 20, +) = 120

calc(100, 20, -) = 80

calc(100, 20, *) = 2000

calc(100, 20, /) = 5

typedef函式指標用法

形式1 返回型別 函式名 參數列 cpp view plain copy char pfun int char glfun inta void main 第一行定義了乙個指標變數pfun。首先我們根據前面提到的 形式1 認識到它是乙個指向某種函式的指標,這種函式引數是乙個int型,返回值是char型...

typedef函式指標用法

形式1 返回型別 函式名 參數列 cpp view plain copy print?char pfun int char glfun int a void main char pfun int char glfun int a void main 第一行定義了乙個指標變數pfun。首先我們根據前面...

typedef函式指標用法

形式1 返回型別 函式名 參數列 cpp view plain copy char pfun int char glfun inta void main 第一行定義了乙個指標變數pfun。首先我們根據前面提到的 形式1 認識到它是乙個指向某種函式的指標,這種函式引數是乙個int型,返回值是char型...