Die Regel haarige Erklärungen zum Lesen ist mit der linken Kennung zu starten und Ihren Weg aus arbeiten, daran erinnern, dass ()
und []
bind vor *
(dh *a[]
ist ein Array von Zeigern, (*a)[]
ein Zeiger auf ein Feld ist, ist eine Funktion *f()
einen Zeiger zurückkehrt, und (*f)()
ist ein Zeiger auf eine Funktion):
GetPtr1 -- GetPtr1
GetPtr1( ) -- is a function
GetPtr1( opCode) -- taking a single parameter named opCode
GetPtr1(const char opCode) -- of type const char
*GetPtr1(const char opCode) -- and returning a pointer
(*GetPtr1(const char opCode)) ( ) -- to a function
(*GetPtr1(const char opCode)) (float, float) -- taking two parameters of type float
float (*GetPtr1(const char opCode)) (float, float) -- and returning float
wenn also opCode
gleich ‚+‘, GetPtr1
Willen r Um einen Zeiger auf die Funktion Plus
zu setzen, und wenn es '-' ist, wird ein Zeiger auf die Funktion Minus
zurückgegeben.
C- und C++ - Deklarationssyntax ist expressionszentriert (ähnlich wie Bjarne gerne etwas anderes vorgeben würde); Die Form der Deklaration sollte mit der Form des Ausdrucks übereinstimmen, wie er im Code verwendet werden würde.
Wenn wir eine Funktion f
haben, die einen Zeiger auf int
zurück, und wir wollen den Wert für den Zugriff auf die verwiesen wird, führen wir die Funktion und dereferenzieren das Ergebnis:
x = *f();
Der Typ des Ausdruck*f()
ist int
, so die Erklärung/Definition für die Funktion ist
int *f() { ... }
Nehmen wir nun an haben wir eine Funktion f1
, die einen Zeiger auf die oben definierte Funktion f
zurückgibt, und wir möchten auf diesen Ganzzahlwert zugreifen, indem wir f1
aufrufen. Wir müssen f1
nennen, derefence das Ergebnis (die die Funktion f
ist), und ausführen und dann dereferenziert dass Ergebnis (da f
einen Zeiger zurückgibt):
x = *(*f1())(); // *f1() == f, so (*f1())() == f() and *(*f1())() == *f()
Der Typ des Ausdruck*(*f1())()
ist int
, so dass die decaration/Definition für f1
Bedürfnisse
int *(*f1())() { return f; }
sein, es kann besser sein 'wenn andere (opCode == 'zu überprüfen -')' in futu einige Nachtschichten zu vermeiden brennen re – Chubsdad
Thema erzählt nicht viel über Ihre Frage .. Es sollte. – mih