Déréférencement d'un pointeur de fonction : percer le mystère
Contrairement à l'hypothèse selon laquelle le déréférencement d'un pointeur de fonction n'accomplit rien, il initie un comportement unique en C Les pointeurs de fonction ne sont pas déréférencés dans le sens conventionnel d'accès à la mémoire de données en tant que code. mémoire.
Au lieu de cela, le déréférencement d'un pointeur de fonction dans un contexte rvalue (comme dans l'exemple de code fourni) déclenche sa conversion immédiate en un pointeur vers la fonction d'origine. Étonnamment, le déréférencement ultérieur de ce pointeur récupère la même valeur de fonction, qui est ensuite rapidement reconvertie en pointeur. Ce cycle peut être répété indéfiniment.
Ce comportement devient particulièrement évident lors de l'examen des pointeurs de fonction dans un contexte lvalue (par exemple, le côté gauche d'une affectation). Contrairement aux tableaux, qui sont convertis en pointeurs d’éléments, les valeurs de fonction sont converties en pointeurs vers leur propre type. Ainsi, le déréférencement d'un pointeur de fonction dans un contexte lvalue attribue une nouvelle fonction au pointeur.
La justification derrière la conversion implicite des valeurs de fonction en pointeurs est purement pratique. Pour les programmeurs utilisant des pointeurs de fonction, cela élimine la nécessité d'écrire de manière approfondie des &. À l'inverse, les pointeurs de fonction en position d'appel reviennent automatiquement aux valeurs de fonction, évitant ainsi l'utilisation de * pour les invoquer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!