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])
- 1. SQL Reihenfolge der Operationen
- 2. Boolesche Logik (Reihenfolge der Operationen) A und B oder C
- 3. Angular orderBy Reihenfolge der Operationen
- 4. Mysql Abfrage/Reihenfolge der Operationen
- 5. Reihenfolge der Operationen mit Objektinitialisierer Syntax
- 6. Reihenfolge der Operationen für Pre-Inkrement und Post-Inkrement in einem Funktionsargument?
- 7. Reihenfolge der Auswertung von || und && in c
- 8. Was ist die richtige Reihenfolge der Operationen für Kollisionserkennung und Reaktion?
- 9. PHP Dereferenz Array Elemente
- 10. Welche Operationen behalten die RDD-Reihenfolge bei?
- 11. C++ - Reihenfolge der Mitglieder Initialisierung und Inkrementierung
- 12. Was ist die Reihenfolge der Operationen mit dieser Verkettung?
- 13. C++ - atomare Operationen für blockierungsfreie Strukturen
- 14. "Pseudo-atomare" Operationen in C++
- 15. Operationen mit Vektoren und XML-Datei für SVM auf C++
- 16. C#: GridView, Zeile-für-Zeile-Operationen
- 17. Operationen auf Bytes in C#
- 18. atomic.AddInt64 Verursacht ungültige Speicheradresse oder Nullzeiger-Dereferenz
- 19. C++ Qt: bitweise Operationen
- 20. Reihenfolge der Serialisierung in C steuern #
- 21. Pfad/Knoten Reihenfolge der XSD in C#
- 22. C# Pfade Operationen
- 23. C Zuweisen von Zeigern über den Dereferenz- oder Adressoperator
- 24. Umkehren der Reihenfolge eines Satzes in C
- 25. gcc und die Reihenfolge der Operation in C if-Anweisung
- 26. C# Webbrowser Navigation Links in der Reihenfolge
- 27. Reihenfolge der statischen Konstruktoren/initializers in C#
- 28. Lexikografische Reihenfolge in C
- 29. Syntaxfehler bitweise Operationen c
- 30. Lesen der Textdatei in C richtige Reihenfolge
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. –