Vom Rust Reiseführer:Warum wird beim Drucken eines Zeigers das gleiche wie beim Drucken des dereferenzierten Zeigers ausgegeben?
zu dereferenzieren (der Wert bezeichnet erhalten wird, der Verweis auf anstatt selbst)
y
wir das Sternchen (*
)
So benutze ich es tat:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}", x, *ptr_y);
}
Das gibt mir die gleichen Ergebnisse (x = 1; y = 1) auch ohne eine explizite Dereferenzierung:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}", x, ptr_y);
}
Warum? Sollte nicht ptr_y
die Speicheradresse und *ptr_y
drucken 1 drucken? Gibt es eine Art Auto-Dereferenzierung oder habe ich etwas übersehen?
ich am Rust Handbuch über Zeiger ein wenig nach Ihrem Posting und sie benutzen einfach "{: p}, ptr_y" weil "println! wird es automatisch für uns dereferenzieren". Eine kurze Frage: Ich verwende normalerweise etwas wie "Typ Name = Wert" oder "Int Test = 1". Es scheint, dass ich das nicht in Rust als Option haben kann, "let int test = 1" gibt Compiler Fehler? Ich weiß, dass der Compiler den Typ automatisch bekommt, aber um meiner Syntax willen möchte ich sie in meinen Code schreiben :(. Wie auch immer, danke für deine Antwort, auch wenn ich keine Ahnung habe, was das Makro genau macht:). – Vega
Oh, ja, '{: p}' funktioniert auch, der 'p' [Formatspezifizierer] (http://doc.rust-lang.org/nightly/std/fmt/#formatting-traits) ist [implementiert für verschiedene Arten von Zeigern] (http://doc.rust-lang.org/nightly/std/fmt/trait.Pointer.html), um nur die Adresse zu drucken. – huon
[Typen werden angegeben als 'let x: Type = 1; '] (http://doc.rust-lang.org/nightly/guide.html#variable-bindings). – huon