Alle drei Anrufe sind gültig.
Gemäß der C Standard (6.3.2.1 Lvalues, Arrays und Funktion Bezeich)
4 Eine Funktion Bezeichner ein Ausdruck ist, der Funktionstyp hat. Außer wenn es der Operand des sizeof operator65) oder des unären & Operators ist, wird ein Funktionsbezeichner mit dem Typ '' function returning type '' in einen Ausdruck mit dem Typ '' Zeiger auf die Funktion Rückgabetyp '' konvertiert
Darüber hinaus können Sie auch schreiben
first(******second);
, die eine Funktion Bezeichner in Ausdrücken verwendet wird, wird implizit außer in der Tat ein Fall auf die Funktion selbst wenn es als Operand der verwendet wird, um den Zeiger umgewandelt & Operator, an den die Adresse der Funktion explizit übergeben wird.
Hier ist ein demonstratives Programm
#include <stdio.h>
void g(void (*f)(void))
{
f();
}
void f(void)
{
puts("Hello!");
}
int main(void)
{
g(**********f);
return 0;
}
Sein Ausgang ist
Hello!
berücksichtigen, dass die Funktion first
auch wie
erklärt werden könnte
char first (int (char, float)) ;
Ein Funktionsparameter mit einem Der Funktionstyp wird implizit an den Zeiger zur Funktion angepasst.
https://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work – Ryan
Was ist die andere Hausaufgabenfrage? Dann können wir alle in die Kneipe gehen –
warum fragen Sie nicht Ihren Compiler – pm100