lancer un pointeur sur un float ou pointer sur une fonction avec un paramètre de pointeur

J’essaie de comprendre exactement ce que cette ligne de code est, comme je suis en train d’apprendre C.

int (*f) (float *) 

Je sais que la première partie est un pointeur sur un int nommé f, mais la deuxième partie est ce dont je ne suis pas sûr.

Serait-ce classé comme un pointeur sur un int nommé f qui est converti en un pointeur sur float

ou

Serait-ce un pointeur nommé f pointant vers une fonction avec un paramètre de pointeur.

Ce serait formidable si quelqu’un pouvait aider et expliquer pourquoi ou la différence entre les deux, car j’ai un peu de difficulté à comprendre ce concept.

Merci!

Cette ligne déclare f tant que pointeur sur une fonction acceptant un float * comme argument et renvoyant un int .

La déclaration peut sembler délicate, mais elle ne fait que suivre les règles de C. Si nous écrivions

 int *f(float *); 

Il semblerait alors que f est une fonction retournant int * . Ainsi, la priorité correcte doit être forcée en utilisant des parenthèses autour de *f .

Voici un exemple de la façon dont f est défini, auquel un pointeur de fonction est atsortingbué, puis appelé

 #include  int foo(float *real) { float num = *real + 0.5F; return (int)num; } int main(void) { float number = 4.9F; int (*f) (float *) = foo; // define f printf("%d\n", f(&number)); // calls f return 0; } 

Sortie du programme:

 5 

Si vous aviez la déclaration:

 int foo(float *); 

il serait clair que c’était une définition de fonction. Utiliser (*f) au lieu de foo vous donne un pointeur sur une fonction.

Il déclare f tant que pointeur sur une fonction prenant un float * ( un pointeur float ) et renvoyant int . Vous pouvez ensuite l’utiliser comme ça

 float array[5] = {1.0, 2.0, 3.0, 4.0, 5.0}; printf("%d\n", f(array));