Je fais un problème de ctf et il y a une ligne que je ne comprends pas.Impossible de comprendre une instruction de pointeur
int (*fp)(char *)=(int(*)(char *))&puts, i;
Quelqu'un peut-il m'expliquer ce que cela signifie?
Je fais un problème de ctf et il y a une ligne que je ne comprends pas.Impossible de comprendre une instruction de pointeur
int (*fp)(char *)=(int(*)(char *))&puts, i;
Quelqu'un peut-il m'expliquer ce que cela signifie?
fp
est un pointeur
(*fp)
à une fonction
(*fp)(
qui accepte 1 argument de type char
(*fp)(char)
et renvoie une valeur de type int
int (*fp)(char)
Le pointeur est initialisé avec l'adresse puts
après une conversion essentiellement redondante. L'objet i
n'est pas initialisé. Il est de type int
int (*fp)(char *)=(int(*)(char *))&puts, i;
Tout d'abord il y a une variable:
int (*fp)(char *)
fp
est un pointeur vers une fonction qui prend un paramètre char *
et retour int
.
Alors fp
est initialisé à une valeur:
(int(*)(char *))&puts
La valeur est l'adresse de la fonction puts
, jeté au même type que fp
.
Et enfin, il y a une autre déclaration de variable:
int /* ... */, i;
Il y a deux parties à cette déclaration:
int (*fp)(char *)=(int(*)(char *))&puts, i;
premier est: int (*fp)(char *)=(int(*)(char *))&puts;
explication: Ceci est la fonction déclaration de pointeur et initialisation en une seule déclaration. Où fp
est le pointeur vers la fonction puts
. Si vous imprimez la valeur de fp
et puts
ils auront la même valeur, c'est l'adresse de puts
.
#include<stdio.h>
int main()
{
int (*fp)(char *)=(int(*)(char *))&puts, i;
printf("puts %p\n",puts);
printf("fp %p\n",fp);
}
et deuxième est: int i;
Utilisation lien: [fp comme pointeur vers la fonction (pointeur vers un char) int retour] (https://cdecl.org/?q=int++%28* fp% 29% 28char + *% 29) – chux