web-dev-qa-db-fra.com

Quelle est la syntaxe pour déclarer un tableau de pointeurs de fonction sans utiliser un typedef distinct?

Des tableaux de pointeurs de fonction peuvent être créés comme suit:

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

Quelle est la syntaxe pour créer un tableau de pointeurs de fonction sans utiliser le 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 

donc votre réponse est

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

Mais naturellement, c'est une mauvaise pratique, utilisez simplement typedefs :)

Extra: Je me demande comment déclarer un tableau de 3 pointeurs vers des fonctions prenant int et renvoyant un pointeur vers un tableau de 4 pointeurs aux fonctions prenant le double et retournant le caractère? (c'est cool, hein? :))

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

Rappelez-vous que "la délimitation imite l'utilisation" Donc, pour utiliser ce tableau, vous diriez

 (*FunctionPointers[0])();

Correct? Par conséquent, pour le déclarer, vous utilisez le même:

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

Utilisez ceci:

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

Fonctionne comme tout le reste, vous placez [] après le nom.

4
Erik