Heim > Backend-Entwicklung > C++ > Hauptteil

Warum sind Funktionsnamen äquivalent zu Funktionszeigern mit dem Address-of-Operator in C?

Patricia Arquette
Freigeben: 2024-11-15 07:27:02
Original
633 Leute haben es durchsucht

Why are Function Names Equivalent to Function Pointers with the Address-of Operator in C?

Warum entspricht der Funktionsname dem Funktionszeiger mit dem Adressenoperator?

In der C-Programmierung wird ein Funktionsname als Funktionszeiger verwendet entspricht der Anwendung des Adressenoperators (&) auf den Funktionsnamen. Diese scheinbare Inkonsistenz mit anderen Sprachelementen, wie z. B. Arrays, hat eine bestimmte Begründung.

Begründung der Funktionsnamenäquivalenz

Gemäß dem ANSI C90-Begründungsdokument ist die Äquivalenz Zur Verbesserung der Benutzerfreundlichkeit wurde eine Trennung zwischen Funktionsbezeichnern (Funktionsnamen) und Funktionszeigern eingeführt. Indem beide Notationen zugelassen werden, bietet die Sprache eine Kurzform zum Aufrufen von Mitgliedsfunktionen in gepackten Strukturen. Zum Beispiel:

graphics.open(file) // Equivalent to (*graphics.open)(file)
Nach dem Login kopieren

Kuriositäten von Funktionsbezeichnern

Diese Äquivalenz führt zu eigenartigen, aber gültigen syntaktischen Formen:

( &f)(); f(); (*f)(); (**f)(); (***f)();
pf(); (*pf)(); (**pf)(); (***pf)();
Nach dem Login kopieren

Das Komitee begründete das hätte das Verbot von Formen wie (f)() bei gleichzeitigem Zulassen von a (für int a[]) zur Folge gehabt war unnötig und unpraktisch.

Ausnahmen in Parameter- und Rückgabetypen

Interessanterweise kann ein Funktionstyp implizit in einen Zeiger auf sich selbst als Parameter konvertiert werden (z. B. void). g(Funktionstyp)). Bei Verwendung als Rückgabetyp (z. B. FunctionType h();) kann er jedoch nicht in einen Zeiger konvertiert werden. Durch diese Unterscheidung wird sichergestellt, dass Kompatibilitätsprobleme mit Funktionstypen vermieden werden.

Das obige ist der detaillierte Inhalt vonWarum sind Funktionsnamen äquivalent zu Funktionszeigern mit dem Address-of-Operator in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage