**&ptr
&
und *
sind unäre Operatoren, die eine entgegengesetzte Bedeutung 1 von dem anderen haben.
&(lvalue)
bedeutet die Adresse der entsprechenden lvalue
während *(lvalue)
Mittel zurückzukehren, um den Wert von der Adresse von L-Wert wies zurück, die Art des L-Wertes unter Berücksichtigung, um zu wissen, um wie dereferenzieren zu.
Visuell die Bedeutung dieser Operatoren wie folgt aussieht (mein Talent in artist-mode
von emacs
ist nicht zu groß):
+----------------+
| ptr = *&ptr |
+--------------+-+
/ \
/ \
&ptr \
+----------------+
| *ptr |
+----------------+
/
/
ptr
Bitte beachte, dass ich in der Box, während der rechte Wert markiert, außerhalb der Box die Adressen des Gedächtnisses der linken Werte der entsprechenden Speicherplätze.
Jetzt, wenn Sie *&(lvalue)
schreiben, bedeutet es, den Wert von der Adresse von Lvalue zu erhalten, die in Kürze lvalue
geschrieben wird.
So **&ptr
bedeutet *ptr
- nämlich den Wert aus der Adresse Zeiger durch ptr, als integer dereferenziert, in Ihrem Fall 10.
2**ptr
Der Lexer wird den Code in Token aufgeteilt und den Parser einen Baum so bauen:
(2) * (*ptr)
in diesem Fall wird das Ergebnis 2 mal der Wert aus der Adresse der ptr
, in Ihrem c sein ase 20
.
die ersten 10 ist der Inhalt von ptr (und ptr ist der adr von x), so ist es der Inhalt von x ... der zweite du & = du bekommst adr von ptr, * = du bekommst sein Inhalt, * = du bekommst wieder den Inhalt von ptr, der auch x ist. Das letzte multipliziert du das * ptr mit 2 und * ptr ist wieder der Inhalt von x –
Wenn du verstehst, was '* ptr' ist, wirst du wahrscheinlich verstehen, was' 2 * * ptr' ist, wenn es sinnvoll formatiert ist. (Es ist zwei Mal "* ptr".) – Ryan
Sie können diese Messwerte nützlich finden [Was bedeutet "Dereferenzierung" eines Zeigers bedeuten?] (Https://StackOverflow.com/questions/4955198/what-does-dereferencing-a-pointer -mean) und [Bedeutung von "Referenzieren" und "Dereferenzieren"] (https://stackoverflow.com/questions/14224831/meaning-of-referencing-and-dereferencing) –