sirven que punteros puntero parametros para operaciones los funciones ejemplos con como cadenas arreglos aritmetica pointers rust dereference

pointers - punteros - ¿Por qué imprimir un puntero imprime lo mismo que imprimir el puntero desreferenciado?



punteros en c ejemplos (2)

El óxido generalmente se centra en el valor del objeto (es decir, la parte interesante de los contenidos) en lugar de la identidad del objeto (direcciones de memoria). La implementación de Display for &T donde T implementa Display difiere directamente a los contenidos. Expandir esa macro manualmente para la implementación de String de Display :

impl<''a> Display for &''a String { fn fmt(&self, f: &mut Formatter) -> Result { Display::fmt(&**self, f) } }

Es decir, solo está imprimiendo su contenido directamente.

Si le interesa la identidad del objeto / la dirección de memoria, puede usar el formateador de Pointer , {:p} :

fn main() { let x = 1; let ptr_y = &x; println!("x: {}, ptr_y: {}, address: {:p}", x, ptr_y, ptr_y); }

Salida:

x: 1, ptr_y: 1, address: 0x7fff4eda6a24

playground

De la guía Rust:

Para desreferenciar (obtener el valor al que se hace referencia en lugar de la referencia en sí) y , usamos el asterisco ( * )

Entonces lo hice:

fn main() { let x = 1; let ptr_y = &x; println!("x: {}, ptr_y: {}", x, *ptr_y); }

Esto me da los mismos resultados (x = 1; y = 1) incluso sin una desreferencia explícita:

fn main() { let x = 1; let ptr_y = &x; println!("x: {}, ptr_y: {}", x, ptr_y); }

¿Por qué? ¿No debería ptr_y imprimir la dirección de memoria y *ptr_y print 1? ¿Hay algún tipo de autorreferencia o me perdí algo?


fn main() { let x = &42; let address = format!("{:p}", x); // this produces something like ''0x7f06092ac6d0'' println!("{}", address); }