typedef
est une construction du langage qui associe un mot-clé à un type.
Vous l'utilisez de la même façon que vous utilisez le type initiaux, par exemple
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
de les utiliser comme
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
Comme vous pouvez le voir, vous pouvez simplement remplacer le typedefed mot avec sa définition donnée ci-dessus.
La difficulté réside dans le pointeur de fonctions syntaxe et de la lisibilité dans le C et le C++, et l' typedef
pouvez améliorer la lisibilité de ces déclarations. Toutefois, la syntaxe est approprié, étant donné que les fonctions - contrairement à d'autres types simples - peut avoir une valeur de retour et les paramètres, d'où la nécessité d'utiliser plusieurs mots-clés et des parenthèses pour écrire la déclaration de la fonction.
La lisibilité peut commencer à être vraiment difficile avec des pointeurs de fonctions les tableaux, et quelques autres encore plus indirecte saveurs.
Pour répondre à vos trois questions
Pourquoi est typedef utilisé?
Afin de faciliter la lecture du code - en particulier pour les pointeurs de fonctions, ou les noms de structure.
La syntaxe semble étrange (dans le pointeur de déclaration de fonction)
Cette syntaxe n'est pas évident à lire, au moins au début. À l'aide d'un typedef
déclaration au lieu de cela facilite la lecture
Est un pointeur de fonction créée pour stocker l'adresse de la mémoire d'une fonction?
Oui, un pointeur de fonction stocke l'adresse d'une fonction. Cela n'a rien à voir avec l' typedef
construire qui seulement la facilité de l'écriture/lecture d'un programme, le compilateur juste élargit la définition de type de définition avant de compiler le code.
Exemple:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456