Diese Frage folgt this other question about C declarations. Lesen Sie die Antwort auf diese Frage, ich las über die spiral rule und ich verstand auch, was "Erklärung folgt Verwendung" bedeutet.Spiralregel und 'Deklaration folgt Verwendung' zum Analysieren von C- und C++ - Deklarationen
Ok soweit. Aber dann las ich this declaration:
char *(*(*a[N])())();
und ich habe mich gefragt, wie es mit dem analysieren „Erklärung folgt usage“ ‚Regel‘. Speziell für den Array-Teil.
Was ich lese ist:
(*(*a[N])())
eine Funktion ist ()
Rückkehr ein char *
, dann dereferencing die folgende
(*a[N])() // 1
ist diese 'Funktion einer char*
Rückkehr', und so 1 ein 'Zeiger auf eine Funktion char *
zurück' dann würde ich sagen 'wenn (*a[N])
aufgerufen wird, ist es [vorherige Erklärung]'. An dieser Stelle haben wir (*a[N])
ist eine Funktion, die einen Zeiger auf eine Funktion zurückgibt char *
zurückgibt.
Aber dann weiß ich nicht, wie man diese Regel anwendet, um zwischen dem "Zeiger auf Feld" und "Feld des Zeigers" zu unterscheiden.
Kann jemand das klären?
Andere Frage: Was sind die Regeln der "Vorrang" in solchen Deklarationen, zwischen &
(in C++), *
und []
? [Maybe „Vorrang“ ist nicht der richtige Begriff]
Um zu überprüfen, ob ich die ‚Spirale der Regel‘ richtig verstanden, ich diesen Ausdruck auch unten analysieren; Bitte sag mir, wenn ich falsch liege.
+-----------+
| +------+ |
| | +-+ | |
| |^| | |
char* (*(* a[N])())();
^^^^^^
| | | | | |
| | +---+ | |
| +--------+ |
+--------------+
Für mich ist es einfacher (loop durch loop):
a
ist ein Array von N ...- Zeiger Zurückkehren zu funktionieren ...
- Zeiger auf Funktion zurückkehr ...
char *
Aber vielleicht verpasse ich etwas, was mir in diesem Fall die richtige Antwort geben könnte, aber das könnte in einem komplizierteren Fall falsch sein.
@Vality: Wenn Sie das C++ - Tag löschen möchten, müssen Sie auch in C++ auf "&" verzichten. –
@JonathanLeffler Guter Punkt, Normalerweise würde ich sagen, dass dies in zwei Fragen aufgeteilt werden muss, aber es ist eine so alte Frage, die ich nicht will. – Vality
@Vality Wie kommt die Frage plötzlich so viel Aufmerksamkeit auf sich? (Ich wurde für das Abzeichen "nette Frage" benachrichtigt). –