Ungültige Zeigerinterpretation

7

Ich stoße zufällig auf den folgenden Funktionszeiger.

%Vor%

Es sieht aus wie ein Array von Funktionszeigern im folgenden Format, aber ich kann nicht sehen, was f - & gt; (* x ()) bedeutet. Wie interpretiere ich diesen unordentlichen Funktionszeiger?

%Vor%

HINZUGEFÜGT

Mit John Bodes Hilfe mache ich ein Beispiel wie folgt.

%Vor%

Ich könnte das erwartete Ergebnis bekommen.

%Vor%

Und Sie finden eine bessere Implementierung hier .

    
prosseek 05.11.2010, 13:43
quelle

5 Antworten

12

Meine allgemeine Vorgehensweise besteht darin, den am weitesten links liegenden Bezeichner in der Deklaration zu finden und mich dann herauszuarbeiten, wobei ich daran denke, dass [] und () bind vor * sind (dh *f() wird normalerweise als *(f()) geparst) und *a[] wird normalerweise als *(a[]) ) analysiert.

Also,

%Vor%

Wie würde solch ein Biest in der Praxis aussehen?

%Vor%

Der Ausdruck &funclist gibt einen Zeiger auf das Array zurück, also

%Vor%     
John Bode 05.11.2010, 15:15
quelle
6
%Vor%

x is a function returning pointer to array of pointer to function returning char

%Vor%

In diesem Fall f is an array of pointer to function returning char

Die Verwendung der Rechts-Links-Regel wäre von Vorteil.

    
Prasoon Saurav 05.11.2010 13:47
quelle
5
%Vor%     
user470379 05.11.2010 13:49
quelle
3

Einige typedefs machen es klarer:

%Vor%

Dies definiert charfunc_t als Zeiger auf eine Funktion ohne Argumente, die char zurückgibt.

%Vor%

funcarr_t ist ein Array solcher Funktionszeiger.

x ist eine Funktion, die einen Zeiger auf ein solches Array zurückgibt und jetzt wie folgt deklariert werden kann:

%Vor%     
sth 05.11.2010 14:00
quelle
2

Besuchen Sie diese Seite, damit Sie die c-Deklarationen besser verstehen ( cdecl.org ). Wenn Sie das obige eingeben, wird Ihnen dies mitgeteilt

  

deklariere x als Funktion, die den Zeiger auf das Array des Zeigers zurückgibt, um die Funktion char (

) zurückzugeben
    
t0mm13b 05.11.2010 13:54
quelle

Tags und Links