C Zeigeradresse drucken

8

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

    
Robert Rocha 14.01.2014, 02:08
quelle

4 Antworten

24

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.

%Vor%

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.

    
haccks 14.01.2014, 02:12
quelle
2
%Vor%     
Andrew L 14.01.2014 02:26
quelle
2

Betrachten Sie Folgendes als ein Beispiel:

%Vor%

Wie Sie sehen können:

  1. x hat den Wert 1 und die Adresse 1000
  2. y hat den Wert 2 und die Adresse 1004
  3. ip hat den Wert 1000 (die Adresse von x ) und die Adresse 1008

Betrachten Sie Folgendes:

  1. x == 1 und &x == 1000
  2. y == 2 und &y == 1004
  3. ip == 1000 und &ip == 1008 und *ip == 1 (der Wert von x )

Hoffe, das hilft dir, zu visualisieren, was passiert.

    
Fiddling Bits 14.01.2014 02:35
quelle
0

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

übergeben

4. Zeile: Y wird nun auf den Wert der Variablen X an der Adresse ip

gesetzt

Die 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).

    
Adrian Zhang 26.11.2015 05:53
quelle

Tags und Links