Ответ 1
Rust обычно фокусируется на значении объекта (то есть интересной части содержимого), а не на идентичности объекта (адреса памяти). Реализация Display
для &T
где T
реализует Display
напрямую относится к содержимому. Расширение этого макроса вручную для реализации String
в Display
:
impl<'a> Display for &'a String {
fn fmt(&self, f: &mut Formatter) -> Result {
Display::fmt(&**self, f)
}
}
То есть он просто печатает свое содержимое напрямую.
Если вы заботитесь об идентичности объекта/адресе памяти, вы можете использовать форматировщик Pointer
, {:p}
:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}, address: {:p}", x, ptr_y, ptr_y);
}
Выход:
x: 1, ptr_y: 1, address: 0x7fff4eda6a24