typedef函式指標的用法 C

2021-07-02 12:27:20 字數 2484 閱讀 2382

**簡化

, 促進跨平台開發的目的.

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

不同點:typedef 在編譯時被解釋

,因此讓編譯器來應付超越預處理器能力的文字替換

。用法一:

typedef

int (*myfun)(int, int)

;這種用法一般用在給函式定義別名

的時候上面的例子定義myfun

是乙個函式指標

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

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

先去掉typedef 和別名

, 剩下的就是原變數的型別.

去掉typedef和myfun以後就剩:

int (*)(int, int)

用法二:

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

.typedef

structmy_type

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

my_type tmp;

第二種用法:typedef

原變數型別

別名typedef補充內容:

例如:typedef int (*pf) (const char *, const char *);

這個宣告引入了 pf 型別

作為函式指標的同義字

,該函式有兩個 const char * 型別的引數

以及乙個 int 型別的返回值

。簡單的函式指標的用法

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

char(*pfun)(int);

char glfun(int a)

void main()

第一行定義了乙個指標變數pfun

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

。第二行定義了乙個函式glfun().

該函式正好是乙個以int為引數返回char的函式。我們要從指標的層次上理解函式-函式的函式名實際上就是乙個指標

,函式名

指向該函式的**在記憶體中的首位址

。使用typedef更直接

typedef

char(*ptrfun)(int)

ptrfun pfun;

char glfun(int a)

void main()

typedef的功能是定義新的型別

。第一句就是定義了一種ptrfun的型別,並定義這種型別為指向某種函式的指標

,這種函式以乙個int為引數並返回char型別。

//下面是個例子:

//在typedef的使用中,最麻煩的是指向函式的指標,如果沒有下面的函式,你知道下面這個表示式的定義以及如何使用它嗎?

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

如果不知道,請看下面的程式,裡面有比較詳細的說明

// 定義四個函式

int add(int, int);

int sub(int, int);

int mul(int, int);

int div(int, int);

// 定義指向這類函式的指標

typedef int (*fp_calc)(int, int);

// 我先不介紹,大家能看懂下一行的內容嗎?

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

// 下一行的內容與上一行完全相同,

// 定義乙個函式calc_func,它根據操作字元 op 返回指向相應的計算函式的指標

fp_calc calc_func(char op);

// 根據 op 返回相應的計算結果值

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

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,而不是最後的兩個整形

// 改函式只返回了乙個函式指標,相當於 fp_calc calc_func(char op)

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

fp_calc calc_func(char op)

return null;

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

void test_fun()

執行結果

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型...