2012-03-12 13 views
7

私は関数ポインタの構文を理解するのに苦労しています。私がしようとしているのは、引数を取らずにvoidポインターを返す関数ポインターの配列を持つことです。誰も助けてくれますか?Cでの関数ポインタの配列

+5

正常に動作していなくても、試したコードを投稿すると、より良い応答を得ることができます。それはあなたの努力を実証します。 –

+0

これを確認してください[link](http://c-faq.com/decl/spiral.anderson.html) – Vikram

答えて

16
  1. まず第一に、あなたはおよそcdecl学ばなければならない:

    cdecl> declare a as array 10 of pointer to function(void) returning pointer to void 
    void *(*a[10])(void) 
    
  2. あなたが手でそれを行うことができます - ちょうど内側からそれを構築:

    a

    ですアレイ:

    機能へ

    *a[10]

    (*a[10])

    引数を取りません:

    (*a[10])(void)

    再ポインタの

    void *を回し:あなたの配列を作る、その後

    typedef void *(*func)(void); 
    

    そして:

    void *(*a[10])(void)

  3. それはあなたがあなたの人生を容易にするためにtypedefを使用する場合より良いです

    func a[10]; 
    
+0

注:最初のリンクは非常に役に立ちます! – Ziezi

2

使用typedefs

typedef void* func(void); 
func *arr[37]; 
7

複合構文が複雑すぎると、通常、typedefは内容を消去します。

など。 typedefをせずに、私は次のようになります推測

typedef void *(* funcPtr)(void); 

funcPtr array[100]; 

void *(* array[100])(void); 
2

配列名でスタートし、あなたの方法を動作し、*[]()バインド(*a[](*f)()がAで、*f()ポインタを返す関数である、(*a)[]は、配列へのポインタで、ポインタの配列であることを思い出します関数へのポインター):

 farr    -- farr 
     farr[N]   -- is an N-element array 
     *farr[N]   -- of pointers 
     (*farr[N])( )  -- to functions 
     (*farr[N])(void)  -- taking no arguments 
    *(*farr[N])(void)  -- and returning pointers 
void *(*farr[N])(void); -- to void 
関連する問題