2017-06-10 2 views
2

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?

+0

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

Répondre

3

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; 
0

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; 
0

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;