2016-04-07 7 views
2

私はref&をいつ交換するのかを理解しようとしています。別のコード例では、間違った量の&を使用しましたが、いくつかのテストを行ったところ、これは時々動作することがわかりました。一例として、このコードを取る:複数の '&'を追加すると、変数のアドレスが変わるのはなぜですか?

fn main() { 
    let test  = 5; 
    let ref testRef = test; 

    println!("&test    as *const _ {:?}", &test  as *const _); 
    println!("&testRef   as *const _ {:?}", &testRef as *const _); 
    println!("&*testRef   as *const _ {:?}", &*testRef as *const _); 

    println!("&&&&&&&&&&testRef as *const _ {:?}", &&&&&&&&&&testRef as *const _); 
    println!("&&&&&testRef  as *const _ {:?}", &&&&&testRef  as *const _); 
    println!("&&&&&&*testRef as *const _ {:?}", &&&&&&*testRef as *const _); 

    println!("&&&&&&&&&&testRef    {:?}", &&&&&&&&&&testRef); 
    println!("&&&&&testRef     {:?}", &&&&&testRef); 
    println!("&&&&&&*testRef    {:?}", &&&&&&*testRef); 
} 

シェル:あなたは変数にだけパスではありません式に&演算子を使用する場合

&test    as *const _ 0x7fffac2d5be4 <- this no problem I understand 
&testRef   as *const _ 0x7fffac2d5bd8 <- this no problem I understand 
&*testRef   as *const _ 0x7fffac2d5be4 <- this no problem I understand 

&&&&&&&&&&testRef as *const _ 0x7fffac2d5998 <- why this found and 
&&&&&testRef  as *const _ 0x7fffac2d58f0 <- It changes every 
&&&&&&*testRef as *const _ 0x7fffac2d5840 <- time you add & 

&&&&&&&&&&testRef    5 
&&&&&testRef     5 
&&&&&&*testRef    5 

答えて

6

、錆は、実際に、一時、名前の変数を作成し、式の結果を代入し、一時変数への参照を与えます。

let tmp = &test; 

、その後、錆は明らかに新しいメモリ位置を有している、あなたに&tmpを与える:あなたが&&testを行うのであれば、錆(のはそれtmp呼びましょう)一時的に作成されます。

関連する問題