:ポインタを印刷すると、逆参照されたポインタを印刷するのと同じことが印刷されるのはなぜですか?錆ガイドから
逆参照(むしろ参照自体よりも言及されている値を取得)
y
、我々はアスタリスク(*
)
を使用するので、私はそれをやった:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}", x, *ptr_y);
}
これは私に同じ結果が得られる(X = 1、Y = 1)であっても、明示的な逆参照することなく:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}", x, ptr_y);
}
なぜですか? ptr_y
メモリアドレスを印刷し、*ptr_y
印刷する必要はありませんか?何かの自動参照がありますか、私は何かを逃しましたか?
私はおよそ錆ガイドで読みますあなたの投稿の後にちょっとしたポインタがあり、 "{:p}、ptr_y"は "println!が自動的に参照解除する"ために使用されます。 短い質問: 私は通常 "タイプ名=値"または "intテスト= 1"のようなものを使用します。私はオプションとして、 "int int test = 1"をコンパイルエラーとしています。私はコンパイラが型を自動的に取得することを知っていますが、私の構文のために私は宣言するときに私のコードに書いています:(。 とにかく、マクロが正確に何をしているのかわからない場合でも、 )。 – Vega
ああ、そうです、 '{:p}'も動作し、 'p' [フォーマット指定子](http://doc.rust-lang.org/nightly/std/fmt/#formatting-traits)は[様々な種類のポインタ](http://doc.rust-lang.org/nightly/std/fmt/trait.Pointer.html)を使用してアドレスを印刷するだけです。 – huon
[タイプは 'let x:Type = 1;'](http://doc.rust-lang.org/nightly/guide.html#variable-bindings)として指定されています。 – huon