Wenn ich *ptr[x]
mache, ist das äquivalent zu *(ptr[x])
oder (*ptr)[x]
?Reihenfolge der Operationen für Dereferenz und Klammer-Ref in C
Antwort
*(ptr[x])
Siehe Wikipedia operator precedence table, oder, für eine ausführlichere Tabelle, this C/C++ specific table.
Mit dem gegen den Uhrzeigersinn Bewegung des Analysierens und Parsen, dass einfaches Beispiel
1. starting with ptr, work in counter-clockwise until you hit asterisk operator 2. asterisk, in counter-clockwise until you hit subscript operator 3. we arrive here, at subscript operator [x]
Da []
höhere Priorität als der Stern hat nach dieser table, dass es *(ptr[x])
Woher kommt diese Gegenuhrzeigersinn-Methode? – Claudiu
@Claudiu: Es ist eine bekannte Technik zum Analysieren und Analysieren von C-Ausdrücken ... sie findet sich in 'Experten C Programmierung - Peter Van der Linden', siehe http://stackoverflow.com/questions/2305255/pointer-array- Syntax-char-p-pn-in-cc – t0mm13b
Das ist für Parsing Typ Spezifizierer und Deklarationen. Aber in der Frage '* ptr [x]' ist ein Ausdruck, und alles, was Sie wissen müssen, ist die Vorrangstellung des Operators. –
In C macht, alle Postfix Operatoren haben eine höhere Priorität als Präfixoperatoren, und Präfixoperatoren haben höhere Priorität als Infixoperatoren. Also seine *(ptr[x])
dieser Link erwähnt nicht Zeiger Dereferenzierung ... aber es heißt Array-Zugriff bindet am dichtesten – Claudiu
Das '*' ist in der 2. Zeile der Tabelle, nach '[]' in der ersten Zeile. –
Ah, ich sehe, wie das verwirrend sein könnte, da '*' Multiplikation oder Zeigerdereferenz bedeuten könnte. Die Multiplikation folgt jedoch in Zeile 3 der Tabelle. –