# Trait alloc::fmt::Pointer

1.0.0 · source ·

    pub trait Pointer {
        // Required method
        fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>;
    }

Expand description

`p` formatting.

The `Pointer` trait should format its output as a memory location. This is commonly presented as hexadecimal.

For more information on formatters, see the module-level documentation.

## §Examples

Basic usage with `&i32`:

    let x = &42;

    let address = format!("{x:p}"); // this produces something like '0x7f06092ac6d0'

Run

Implementing `Pointer` on a type:

    use std::fmt;

    struct Length(i32);

    impl fmt::Pointer for Length {
        fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
            // use `as` to convert to a `*const T`, which implements Pointer, which we can use

            let ptr = self as *const Self;
            fmt::Pointer::fmt(&ptr, f)
        }
    }

    let l = Length(42);

    println!("l is in memory here: {l:p}");

    let l_ptr = format!("{l:018p}");
    assert_eq!(l_ptr.len(), 18);
    assert_eq!(&l_ptr[..2], "0x");

Run

## Required Methods§

1.0.0 · source

#### fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter.

## Implementors§

1.4.0 · source§

### impl<F> Pointer for F
where F: FnPtr,

1.33.0 · source§

### impl<Ptr> Pointer for Pin<Ptr>
where Ptr: Pointer,

1.0.0 · source§

### impl<T> Pointer for *const T
where T: ?Sized,

1.0.0 · source§

### impl<T> Pointer for *mut T
where T: ?Sized,

1.0.0 · source§

### impl<T> Pointer for &T
where T: ?Sized,

1.0.0 · source§

### impl<T> Pointer for &mut T
where T: ?Sized,

1.25.0 · source§

### impl<T> Pointer for NonNull<T>
where T: ?Sized,

1.24.0 · source§

### impl<T> Pointer for AtomicPtr<T>

1.0.0 · source§

### impl<T: ?Sized, A: Allocator> Pointer for Box<T, A>

1.0.0 · source§

### impl<T: ?Sized, A: Allocator> Pointer for Rc<T, A>

1.0.0 · source§

### impl<T: ?Sized, A: Allocator> Pointer for Arc<T, A>