2013-06-25 13 views
10

通常、データ型の代替名を取得するにはtypedefを使用します。例えば -typedef int(* pf)は説明が必要

typedef long int li; // li can be used now in place of long int 

しかし、typedefの下に何をするのでしょうか?

typedef int (*pf) (int, int); 
+2

[cdecl](http://cdecl.org)からレスキュー! – milleniumbug

+2

[Typedef関数ポインタの重複が可能ですか?](0120-385-301) – user93353

+0

@milleniumbug:試しましたか?構文エラー! – MatthewD

答えて

21
typedef int (*pf) (int, int); 

これはpfタイプで宣言された変数は、2つのintパラメータを受け取り、intを返す関数へのポインタであることを意味します。言い換えれば

は、あなたがこのような何かを行うことができます。

#include <stdio.h> 

typedef int (*pf)(int,int); 

int addUp (int a, int b) { return a + b; } 

int main(void) { 
    pf xyzzy = addUp; 
    printf ("%d\n", xyzzy (19, 23)); 
    return 0; 
} 
+1

素晴らしい例、+1 – lnafziger

+0

@ Yu Hao いい例、ありがとう! – phoenix

0

それは関数ポインタのプロトタイプです。次に、このような引数のものとしての機能を宣言することができます。

void RegisterCallback(pf your_callback_func); 

は次に、あなたのように渡された関数を呼び出すことができFUNC PTR:

... 
your_callback_func(i, j); 
... 
0

typedefは名前pfを持っており、それがためのものです2つの整数を引数とし、整数を返す関数ポインタ。

known typesunknown typeを定義しますよう

0

typedef作品。

したがって、2つのint引数をとり、intを返す関数型を定義します。

4
typedef long int li; 

long intを入力する代替名liを割り当てます。まったく同じ方法

typedef int (*pf) (int, int); 

int (*) (int, int)を入力する代替名pfを割り当てます。それがすべてそれにあること。

おそらく気付いたように、typedef宣言は、変数宣言と同じ構文に従います。唯一の違いは、新しい変数名が新しいタイプ名に置き換えられることです。したがって、Cの宣言構文に従って、宣言された名前は、配列型または関数型が関係しているときに、宣言子の "中間"に現れることがあります。別の例として

typedef int A[10]; 

int [10]の代替名としてAを宣言する。この例では、新しい名前も宣言の「中間」に表示されます。

+0

うまく説明.. .. :) – phoenix