Gemischte Zeiger-, Array- und Funktionstyp-Deklarationen in C

8

Ein Freund von mir versuchte mich auf C zu testen (meine stärkste Sprache ist C ++) und er stellte mir drei Fragen, die ich nicht beantworten konnte:

Versuchen Sie, die folgenden Deklarationen zu erklären:

%Vor%

Kann jemand diese Funktionsdeklarationen erklären und erklären, welche Konzepte verwendet werden?

    
nmuntz 26.08.2009, 01:26
quelle

5 Antworten

21

Nun, der erste ist ein Zeiger auf eine Funktion. Mit anderen Worten, es deklariert eine Variable "x", die auf eine Funktion des folgenden Typs zeigt:

%Vor%

Und könnte wie folgt verwendet werden:

%Vor%

Die zweite scheint eine ungültige Syntax zu sein, aber ich könnte falsch liegen. Wenn es vor dem x ein Sternchen hätte (wie int (* x [10]) (int, char *, void *)), wäre es ein Array von Funktionszeigern und würde wie ein normales Array verwendet:

%Vor%

Das dritte ist ein Array von Zeigern auf Funktionszeiger, was nicht praktisch erscheint, aber absolut gültig ist. Eine Beispielverwendung könnte sein:

%Vor%

Beachten Sie, dass von diesen die ersten beiden relativ häufig sind. Zeiger auf Funktionen werden verwendet, um Callbacks und verschiedene objektorientierte Programmierkonzepte in C zu erreichen. Ein Array von Zeigern auf Funktionen könnte für eine Ereignistabelle verwendet werden, um den entsprechenden Callback zu finden.

Beachten Sie, dass alle diese in der Tat auch C ++ gültig sind. ;)

Bearbeiten: Ich habe die Grausamkeiten von void main () anscheinend begangen.

Edit 2: Wie Chris Lutz unten betont, sollten sie wirklich in typedefs eingepackt werden. Typedefs machen Code mit Zeigern zu Funktionen VIEL klarer.

    
Walt W 26.08.2009, 01:35
quelle
31

Sie benötigen das cdecl Programm, das Ihnen geben wird Sie eine bestimmte, richtige Antwort auf solche Fragen. Es ist machbar und nützlich, solche Anweisungen manuell zu interpretieren. Dennoch ist cdecl äußerst nützlich, um zu überprüfen, ob Sie eine korrekte Antwort haben.

%Vor%     
hlovdal 26.08.2009 01:40
quelle
7
  1. Ein Funktionszeiger
  2. Ein Array von Funktionszeigern
  3. Ein Array von Zeigern für Funktionszeiger
tensaix2j 26.08.2009 01:33
quelle
6

Sie sind Funktionszeiger, wie oben gesagt, aber meiner Meinung nach ziemlich widerlich geschrieben. Die Art, wie ich sie schreiben würde, ist:

%Vor%

Siehe Walt Ws ausgezeichnete Antwort für mehr über Funktionszeiger.

    
Chris Lutz 26.08.2009 01:39
quelle
3

Da die Syntax von C wie die von C ++ in dieser Angelegenheit ist, könnte geordi interessant sein für dich. Es ist ein weiteres gutes Werkzeug zum Lehren und Lernen dieser Deklarationen (und andere Dinge in Zusammenhang mit C ++ und manchmal auch C).

%Vor%

Wie auf der Seite erklärt, kann es viel mehr tun, einschließlich der Erstellung eines Typs für Sie

%Vor%

Wenn Sie prinzipiell wissen, wie man Dinge deklariert, sich aber nur über eine Sache im Unklaren sind, können Sie Klammern verwenden:

%Vor%

Wenn Sie sehen möchten, wie das mit einem Bezeichner darin aussieht, können Sie auch den Namenstyp ändern

%Vor%

Wenn Sie eine Deklaration erstellen, sich aber nicht sicher sind, ob die Operatoren Vorrang haben, können Ihnen die Vorrangfunktionen von geordi helfen

%Vor%     
Johannes Schaub - litb 27.08.2009 03:47
quelle

Tags und Links