Wert des Zeigers in C

8

Ich habe angefangen, C zu lernen (also, weißt du .. Zeiger).

Ich habe diesen Code:

%Vor%

Meine Ausgabe ist:

%Vor%

Wenn ich hexadezimal oben in dezimal umwandle, bekomme ich: 140720994002157

Meine Fragen:

1) Stellt dieser Dezimalwert die Speicheradresse dar? Ist es nicht zu groß?

2) Wie kann ich den Wert des Zeigers (also die Adresse der Variable c ) als Dezimalzahl ausgeben?

    
padawanTony 25.08.2016, 10:00
quelle

2 Antworten

7
  

Ist [die Adresse] nicht zu groß?

Dies ist eine virtuelle Adresse, was bedeutet, dass ihr numerischer Wert nicht unbedingt die fortlaufende Nummer des Bytes im physischen Speicher darstellt. Darüber hinaus können verschiedene Prozesse unterschiedliche Daten an der gleichen virtuellen Adresse halten, da jeder seinen eigenen Adressraum hat.

  

Wie kann ich den Wert des Zeigers in einem ganzzahligen Format ausgeben?

Verwenden Sie uintptr_t , um den Zeiger als Ganzzahl darzustellen, und drucken Sie dann mit PRIuPTR Makro:

%Vor%

Demo.

    
dasblinkenlight 25.08.2016, 10:17
quelle
2

1). Sie sollten die Adresse als printf("c address = %p\n", &c); drucken. Jetzt versuchen Sie, die Adresse zu drucken, wo die Zeigervariable selbst gespeichert wird, was wahrscheinlich nicht viel Sinn macht.

Davon abgesehen, könnte es immer noch eine gültige Adresse sein, die 64-Bit-Adressen annimmt.

2). Sie müssen es sicher in eine Ganzzahl konvertieren, die garantiert groß genug ist, um eine Zeigeradresse zu enthalten:

%Vor%     
Lundin 25.08.2016 10:08
quelle

Tags und Links