z prowadnicy Rust:Dlaczego drukowanie wskaźnika drukuje to samo, co drukowanie wskaźnika dereferencji?
Aby dereference (uzyskać wartość określa się tutaj zamiast samego odniesienia)
y
używamy gwiazdkę (*
)
Więc zrobiłem to:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}", x, *ptr_y);
}
To daje takie same wyniki (x = 1, y = 1), nawet bez wyraźnego dereference:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}", x, ptr_y);
}
Dlaczego? Czy nie powinien być wydrukowany adres pamięci ptr_y
i *ptr_y
wydrukować 1? Czy jest jakiś rodzaj auto-dereferencji, czy też coś przeoczyłem?
czytam w przewodniku Rust temat Wskaźniki nieco po twoim wpisie i po prostu używają "{: p}, ptr_y", ponieważ "println! automatycznie je usunie dla nas". Krótkie pytanie: Zwykle używam czegoś takiego jak "Type name = value" lub "int test = 1". Wydaje się, że nie mogę tego w Rust jako opcji, "niech int test = 1" daje błąd kompilatora? Wiem, że kompilator dostaje typ automatycznie, ale ze względu na moją składnię chciałbym zapisać go w moim kodzie, gdy zadeklaruję :( W każdym razie, dziękuję za odpowiedź, nawet gdy nie mam pojęcia, co dokładnie robi makro:). – Vega
Och, tak, '{: p}' również działa, specyfikator 'p' [specyfikator formatu] (http://doc.rust-lang.org/nightly/std/fmt/#formatting-traits) jest [zaimplementowany dla różne rodzaje wskaźników] (http://doc.rust-lang.org/nightly/std/fmt/trait.Pointer.html), aby wydrukować tylko adres. – huon
[Typy są określone jako 'let x: Type = 1;'] (http://doc.rust-lang.org/nightly/guide.html#variable-bindings). – huon