Typedef函式指標的用法

2022-03-19 02:50:31 字數 3762 閱讀 8513

**簡化,

促進跨平台開發的目的.

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

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

用法一:

typedefint(*myfun)(int,

int);

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

上面的例子定義myfun

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

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

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

去掉typedef和myfun以後就剩:

int (*)(int, int)

用法二:

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

typedefstructmy_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 =glfun;

(*pfun)(2);

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

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

使用typedef更直接

typedefchar(*ptrfun)(int)

ptrfun pfun;

char glfun(int a)

void main()

pfun = glfun;

(*pfun)(2);

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)

return a

+ b;

int sub(int a, int b)

return a

- b;

int mul(int a, int b)

return a

* b;

int div(int a, int b)

return b?

a/b : -1;

// 這個函式的用途與下乙個函式作業和呼叫方式的完全相同,

// 引數為op,而不是最後的兩個整形

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

return

calc_func(op);

fp_calc calc_func(char op)

switch

(op)

return

null;

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

fp_calc

fp = calc_func(op); // 下面是類似的直接定義指向函式指標變數

// 下面這行是不用typedef,來實現指向函式的指標的例子,麻煩!

int (*s_fp)(int, int) = s_calc_func(op);

// assert(fp == s_fp); // 可以斷言這倆是相等的

if (fp)

return fp(a, b);

else

return -1;

void test_fun()

int a =

100, b = 20;

printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));

printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));

printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));

printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));

執行結果

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