2012-02-25 17 views
4

どのように関数へのポインタを返す関数へのポインタを定義しますか?関数へのポインタを返す関数へのポインタを定義する方法

typedef int(*a)(int,int); 
a (*b)(int,int); 

これは機能しますが、次の機能が動作しないのはなぜですか?ここで

(int(*a)(int,int)) (*b)(int,int); 

または

int(*)(int,int) (*b)(int,int); 

または

(int(*)(int,int)) (*b)(int,int); 
+0

可能であれば、 'typedef'を使用してください。それがなければ、構文は荒々しく混乱しています。私は電話をかぶってしまう可能性があるので、電話からの回答をしたくないほどです。 –

答えて

3

はそれを行うための正しい方法である:

int (*(*b)(int,int))(int,int); 

あなたがの両方を使用して実証し、次のコードをコンパイルすることができますメソッド。私は個人的にはtypedefメソッドを使って分かりやすくします。

#include <stdio.h> 

int addition(int x,int y) 
{ 
    return x + y; 
} 

int (*test(int x, int y))(int,int) 
{ 
    return &addition; 
} 

typedef int (*a)(int, int); 

int main() 
{ 
    a (*b)(int,int); 
    int (*(*c)(int,int))(int,int); 
    b = &test; 
    c = &test; 
    printf(b == c ? "They are equal!\n" : "They are not equal :(\n"); 
} 
関連する問題