2010-08-24 13 views

Antwort

12

*(ptr[x])

Siehe Wikipedia operator precedence table, oder, für eine ausführlichere Tabelle, this C/C++ specific table.

+0

dieser Link erwähnt nicht Zeiger Dereferenzierung ... aber es heißt Array-Zugriff bindet am dichtesten – Claudiu

+0

Das '*' ist in der 2. Zeile der Tabelle, nach '[]' in der ersten Zeile. –

+0

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. –

-2

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])

+0

Woher kommt diese Gegenuhrzeigersinn-Methode? – Claudiu

+0

@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

+0

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. –

4

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])

Verwandte Themen