Comment définir un tableau de pointeurs de fonction en C
J'ai une petite question.
Je suis en train de créer un tableau de pointeurs de fonction dynamiquement avec calloc
.
Mais je ne sais pas comment écrire la syntaxe.
Merci beaucoup.
- Pouvez-vous nous montrer ce que vous avez écrit jusqu'à maintenant?
Vous devez vous connecter pour publier un commentaire.
Le type d'un pointeur de fonction est tout comme la déclaration de la fonction, mais avec "(*)" à la place du nom de la fonction. Donc un pointeur vers:
serait:
Dans le but de désigner une instance de ce type, de mettre le nom à l'intérieur (*), après l'étoile, donc:
déclare une variable appelée foo_ptr qui pointe vers une fonction de ce type.
Tableaux de suivre la normale de la syntaxe du C de mettre les parenthèses près de la variable identifiant, donc:
déclare une variable appelée foo_ptr_array qui est un tableau de 2 pointeurs de fonction.
La syntaxe peut obtenir assez salissante, de sorte qu'il est souvent plus facile de faire un typedef pour le pointeur de fonction et ensuite déclarer un tableau de la place:
Dans l'exemple, vous pouvez faire des choses comme:
Enfin, vous pouvez allouer dynamiquement un tableau avec:
Avis supplémentaires * dans la première ligne de déclarer a1 comme un pointeur vers le pointeur de fonction.
calloc
résultat? n'est-il pas nécessaire? par exemple:int (**a1)( int ) = (some_casting) calloc( 2, sizeof( int (*)( int ) ) );
void *
type de convertir implicitement à tout autre pointeur vers un objet de type.J'ai mis un petit exemple ici qui peuvent vous aider à
Vous vous souhaitez déclarer un tableau de pointeurs de fonction en tant que
pour certains type de
T
. Puisque vous êtes alloue dynamiquement le tableau, vous feriez quelque chose commeou
Vous devez ensuite appeler la fonction comme
ou
Si vous voulez être peu orthodoxe, vous pouvez déclarer un pointeur vers un tableau de pointeurs de fonctions, et ensuite d'allouer que, comme suit:
bien que vous avez la déférence le pointeur sur le tableau lors de la prise de l'appel:
où R est le type de retour, A1, A2... an sont les types d'argument.
En supposant que toutes vos fonctions sont de type
void ()(void)
, quelque chose comme cela