void (*func)(int(*[ ])());
6 Réponses :
Oui:
$ cdecl explain void (* x)(int (*[])()); declare x as pointer to function (array of pointer to function returning int) returning void
Je ne pense pas que ce soit, CDECL n'aime tout simplement pas le nom Func code>.
Nahhhh ... c'est un bug dans CDECL :)
Il vous montre trompé, Lulz (BTW c'est une bonne triche, CDECL est belle XD)
Ce n'est pas une déclaration, c'est une déclaration.
Il déclare Sortie CDECL pour ye petite foi: strong> p> FUNC code> en tant que pointeur sur une fonction renvoyant le vide et en prenant un seul argument de type
int (* []) ( ) code>, lequel est lui-même un pointeur sur un pointeur sur une fonction renvoyant int et de prendre un nombre d'arguments fixe mais non spécifié. p>
"Nombre fixe mais non spécifié d'arguments" - la question est également étiquetée C ++, auquel cas le deuxième type de fonction prend précisément zéro argument.
La balise C ++ a été ajoutée par une personne autre que l'affiche originale, après avoir répondu. Un mouvement trop intelligent, par mon livre.
Gosh, c'est sournois. Il n'est jamais clair quand quelqu'un dit "C / C ++" s'ils l'ont dit parce qu'ils pensent que la réponse est la même pour les deux langues, car ils pensent que les réponses sont différentes entre les deux ...
+1, je veux juste expliquer pourquoi vous dites "Pointeur au pointeur" et CDECL dit "Array of Pointer": Ceci est parce que dans les fonctions, les paramètres déclarés sous forme de tableaux devenus. Donc, personne ne dit "hé, tu as une faute de frappe" :)
void (* func) (bla); code> est un pointeur à une fonction prise
bla code> comme argument, où
bla code> est < Code> int (* []) () code> est une matrice de points de fonction. P>
Voici un guide sur la lecture C Déclarations: P>
http://www.ericgiguere.com/articles/reading-c -declarations.html p>
La procédure générale pour la lecture des déclarateurs poilues est de trouver l'identifiant le plus à gauche et de passer votre moyen de sortir, en vous rappelant que Donc, donné p> Nous le cassons comme suit: P> [] code> et
() code> bind avant
* / Code> (c.-à-d.,
* a [] code> est un tableau de pointeur, pas un pointeur sur un tableau). Ce cas est un peu plus difficile par le manque d'identifiant dans la liste des paramètres, mais encore une fois,
[] code> se lie avant
* code>, donc nous savons que
* [] code> indique un tableau de cuiteurs.
/**
* Define the functions that will be part of the function array
*/
int foo() { int i; ...; return i; }
int bar() { int j; ...; return j; }
int baz() { int k; ...; return k; }
/**
* Define a function that takes the array of pointers to functions
*/
void blurga(int (*fa[])())
{
int i;
int x;
for (i = 0; fa[i] != NULL; i++)
{
x = fa[i](); /* or x = (*fa[i])(); */
...
}
}
...
/**
* Declare and initialize an array of pointers to functions returning int
*/
int (*funcArray[])() = {foo, bar, baz, NULL};
/**
* Declare our function pointer
*/
void (*func)(int(*[ ])());
/**
* Assign the function pointer
*/
func = blurga;
/**
* Call the function "blurga" through the function pointer "func"
*/
func(funcArray); /* or (*func)(funcArray); */
+1 Pour suffisamment bon, essayez d'expliquer comment lire de telles expressions et exemple.
Geordi code>
est un bot C ++, Permet de former ceci:
<litb> geordi: make func a (function returning void and taking (int(*)()) []) * <geordi> {} void (* func)(int(*[])());
Voir Stackoverflow.com/questions/1448849/...