web-dev-qa-db-ja.com

別個のtypedefを使用せずに関数ポインターの配列を宣言するための構文は何ですか?

関数ポインタの配列は次のように作成できます。

typedef void(*FunctionPointer)();
FunctionPointer functionPointers[] = {/* Stuff here */};

typedefを使用せずに関数ポインター配列を作成するための構文は何ですか?

43
Maxpm
arr    //arr 
arr [] //is an array (so index it)
* arr [] //of pointers (so dereference them)
(* arr [])() //to functions taking nothing (so call them with ())
void (* arr [])() //returning void 

あなたの答えは

void (* arr [])() = {};

しかし当然、これは悪い習慣です。typedefsを使用してください:)

Extra: intを受け取り、4つのポインターの配列へのポインターを返す関数への3つのポインターの配列を宣言する方法doubleを取り、charを返す関数に? (それはどれくらいクールでしょう?)

arr //arr
arr [3] //is an array of 3 (index it)
* arr [3] //pointers
(* arr [3])(int) //to functions taking int (call it) and
*(* arr [3])(int) //returning a pointer (dereference it)
(*(* arr [3])(int))[4] //to an array of 4
*(*(* arr [3])(int))[4] //pointers
(*(*(* arr [3])(int))[4])(double) //to functions taking double and
char  (*(*(* arr [3])(int))[4])(double) //returning char

:))

83
Armen Tsirunyan

「delcaration mimics use」を思い出してください。だからあなたが言うだろう言った配列を使用するには

 (*FunctionPointers[0])();

正しい?したがって、それを宣言するには、同じものを使用します。

 void (*FunctionPointers[])() = { ... };
14
Logan Capaldo

これを使って:

void (*FunctionPointers[])() = { };

他のすべてと同じように機能し、名前の後に[]を置きます。

4
Erik