2

次のコードは、3 行目に typedef の名前を指定せずにどのように機能しますか?コンパイラはどのように pf を新しいデータ型と見なしますか?

#include <stdio.h>

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

int main(){
    printf("%d\n", proc(fun, 6, 6));
    return 0;
}

int fun(int a, int b){
    return (a==b);
}

int proc(pf p, int a, int b){
    return ((*p)(a, b));
}
4

5 に答える 5

7

それはそれに名前を付けます:

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

それがtypedefされた名前です。pfは、2 つの int を取り、 int を返す関数へのポインターです。

関数ポインター typedef の動作の詳細については、次を参照してください。

于 2013-09-01T18:09:20.747 に答える
2

pfint引数として 2 つの を受け取り、 を返す関数のエイリアスとして機能しますint

関数ポインタです。

于 2013-09-01T18:10:29.320 に答える
0

typedef 宣言には「pf」という名前があります。また、関数ポインターを表します (データを指すのではなく、メモリ内の実行可能コードを指します)。

関数ポインターを宣言するとき、typedef は (通常の) パターン (「typedef oldTypeName newAliasName」) に従いません。むしろ、エイリアス名 (上記の例では pf) は、戻り値の型 (左側) と引数の型 (右側) の間に表示されます。

于 2013-09-01T18:23:04.867 に答える