質問

10個の関数ポインターの配列を作成するにはどうすればよいですか?私が持っているのはforループで、反復ごとに異なる関数への関数ポインターを設定したいです。 so:

//pseudocode
for i (0..10)
    function = array_of_functions[i];
//...
役に立ちましたか?

解決

// Define alias for function pointer type for convenience
typedef void (*action)(int);

// Example function
void print(int) { ... }

action fs[10] = { print, ... };
for (int i = 0; i < 10; ++i)
{
    action f = fs[i];

    // Call it somehow
    f(i * i);
}

他のヒント

このコード:

return_t (*array_of_functions[10])(arg1_t, arg2_t);

&quot; array_of_functions&quot;を宣言しますそれぞれのポイント先の関数がarg1_t型とarg2_t型の2つの引数を取り、return_t型を返す、関数ポインターの10要素配列として。型を置き換え、必要に応じて引数の数を調整します。

い関数ポインタ構文を扱う必要があるときはいつでも、typedefを使用することをお勧めします。

#include <iostream>

void a(int i)
{
    std::cout<<"a: "<<i<<std::endl;
}

void b(int i)
{
    std::cout<<"b: "<<i<<std::endl;
}

typedef void (*fn)(int);

int main(int argc, char**argv)
{

    fn foo[2];


    foo[0] = a;
    foo[1] = b;


    for(size_t i = 0; i < sizeof(foo) / sizeof(foo[0]); ++i)
    {
        foo[i](i);
    }

    return 0;
}

それを行う最も簡単な方法は、関数のtypedefを作成し、その型で配列を宣言することです。関数のtypedefを作成するには: typedef returntype(* typedefname)(argtype1、argtype2、...、argtypeN); EX:

#include <stdio.h>
#include <stdlib.h>

typedef void (*functype)();

void func1()
{
 //...
}

void func2()
{
 //..
}

//...


void func10()
{
//...
}

int main(int argc, char* argv[])
{
     functype array[] = 
     { 
         &func1, 
         &func2, 
         &func3, 
         &func4, 
         &func5,
         &func6, 
         &func7, 
         &func8, 
         &func9, 
         &func10
     };

     // Use the array...
     return 0;   
}
T (*array_of_functions[10])();

Tは各関数の戻り値の型です(すべての関数は当然同じ型を返します)。パラメータの数/タイプが異なる関数へのポインタを保存する場合は、注意が必要です。

int foo(void) {...}
int bar(int x) {...}
int bletch(double y, double z) {...}
...
int (*array_of_functions[10])() = {foo, bar, bletch, ...};

その場合、各関数が何らかの方法で必要とするパラメーターの数とタイプを追跡する必要があるため、正しく呼び出すことができます。

私は実際には、関数ポインタ型のtypedefについて少し考えています。それらは単純化するほどあいまいになる傾向があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top