Ich lerne C-Zeiger und Adressen zum ersten Mal und wie man sie auf meinem Tablet benutzt
Sagen wir:
%Vor%Sind alle Kommentare korrekt?
Was passiert, wenn ich das Ergebnis von ip ausdrucke? Wird es die Adresse der Variablen x ausgeben, etwa
?011001110
Ja. Alle deine Aussagen sind korrekt. Jedoch im Falle des ersten
%Vor% ist es besser zu sagen, dass ip
ein Zeiger auf einen int
-Typ ist.
Was passiert, wenn ich das Ergebnis von ip ausdrucke?
Es wird die Adresse von x
gedruckt.
Gibt es die Adresse der Variablen x aus, etwa
%Vor%
Nein. Adressen werden in der Regel in hexadezimaler Darstellung dargestellt. Sie sollten %p
specifier verwenden, um die Adresse zu drucken.
HINWEIS:
Beachten Sie, dass *
in der obigen Deklaration nicht der Indirektionsoperator ist. Stattdessen geben Sie den Typ von p
an und weisen den Compiler an, dass p
ein -Zeiger auf int
ist. Das Symbol% co_de% führt nur dann eine Indirektion durch, wenn es in einer Anweisung angezeigt wird.
Betrachten Sie Folgendes als ein Beispiel:
%Vor%Wie Sie sehen können:
x
hat den Wert 1
und die Adresse 1000
y
hat den Wert 2
und die Adresse 1004
ip
hat den Wert 1000
(die Adresse von x
) und die Adresse 1008
Betrachten Sie Folgendes:
x == 1
und &x == 1000
y == 2
und &y == 1004
ip == 1000
und &ip == 1008
und *ip == 1
(der Wert von x
) Hoffe, das hilft dir, zu visualisieren, was passiert.
Es ist alles in Ordnung.
1. Zeile: Sie deklarieren zwei Variablen
2. Zeile: ein Speicherzeiger "ip" ist definiert
3. Zeile: Die Speicheradresse von X wird dem Zeiger ip
übergeben4. Zeile: Y wird nun auf den Wert der Variablen X an der Adresse ip
gesetztDie Speicheradresse ist jedoch im hexadezimalen Format. 011001110 ist ein Datenbyte und keine Speicheradresse. Die Adresse wird eher mit 0x000000000022FE38 (es kann kürzer sein). Bedenken Sie Folgendes:
%Vor%Dies würde die Adresse von X anstatt von * ptr ausgeben. Sie benötigen einen anderen Zeiger, um die Adresse von * ptr zu drucken. Aber das ist ziemlich sinnlos, da ein Zeiger definiert ist, um die Adresse einer Variablen zu drucken. Stellen Sie es sich als Alias für eine andere Variable vor (sein Wert ist der Wert an dieser Speicheradresse).