Ich bin nicht neu in der C-Programmierung. Aber ich verstehe nicht, was sinnvoll ist, um den Zeiger als Strukturelement in C zu halten, z.
%Vor%Verwenden Programmierer es, um objektorientierten (OO) Shape dort C-Code zu geben und abstraktes Objekt zur Verfügung zu stellen? Oder Code technisch aussehen zu lassen.
Ich denke, im obigen Code ist der zweite Weg sanfter und auch ziemlich einfach. Auf die erste Art müssen wir noch &var
übergeben, auch wenn fun()
Mitglied von struct ist.
Wenn es gut ist, den Funktionszeiger in der struct-Definition zu behalten, helfen Sie bitte, den Grund zu erklären.
Wenn Sie einen Zeiger auf die Funktion einer Struktur bereitstellen, können Sie dynamisch auswählen, welche Funktion für eine Struktur ausgeführt werden soll.
%Vor%Dies gibt Ihnen die Möglichkeit, nur einen Code zu behalten, aber zwei verschiedene Funktionen aufzurufen, statt dass Ihr Test gültig ist oder nicht.
Es ist nützlich, wenn Sie versuchen, eine Art "objektbasierte" Programmierung durchzuführen.
Wenn Sie jemals den Quellcode der Quake 3-Engine gesehen haben, können Sie klar sehen, dass die meisten "Entitäten" Attribute haben, die sie definieren, und die Arbeit, die sie machen [welche die Funktionszeiger sind].
Das Trennen von Attributen und Funktionen (durch Funktionszeiger in C) definiert die Attribute und Aktionen eines "struct" -Objekts, die sie ausführen können.
Zum Beispiel:
%Vor%Ich habe das in der Vergangenheit benutzt, um generische Container 1 in C zu implementieren.
Zum Beispiel:
%Vor% Die Listenstruktur selbst ist datenunabhängig und verwendet void *
, um Datenelemente darzustellen, und delegiert alle typbewussten Operationen an die Funktionen, die durch die obigen Zeiger angegeben werden:
1. Für passend lose Definitionen von "generic" und "container"
Manchmal müssen Sie in C eine Funktion aufrufen, ohne deren Implementierung im Voraus zu kennen. Z.B. wenn Sie eine eigenständige Bibliothek entwickeln, die in verschiedenen Projekten verwendet wird. In diesem Fall ist es sinnvoll, einen Funktionszeiger zu einer Kontextstruktur hinzuzufügen und diese an die Bibliotheksfunktionen weiterzugeben. Die Bibliotheksfunktionen können dann Ihre Funktion zur Laufzeit aufrufen, ohne die Header-Dateien, die sie definieren, hinzuzufügen.
Es ist in der Tat ähnlich wie bei objektorientierter Programmierung. In C übergeben Sie normalerweise Kontextvariablen, z. eine Struktur, die eine Menge von Variablen und möglicherweise für diesen Kontext sinnvolle Funktionen zusammenfasst. Dies ist in der Nähe der eqvuivalent in OO-Programmierung, wo Sie eine Klasse instanziieren und die erforderlichen Variablen für die Instanz festlegen.
Hier ist ein Projekt, um die Nützlichkeit von Funktionszeigern zu erklären. Versuchen Sie, eine c-basierte Bibliothek zu erstellen, die Vererbung und Polymorphismus bietet. Oder versuchen Sie "C with Classes" neu zu erstellen. Funktionszeiger in Strukturen sind von entscheidender Bedeutung. Ссылка
Tags und Links c structure oop coding-style struct