blob: c76700258dbab83af8c9f8e1d3cee8fb24a0748a [file] [log] [blame] [view]
r[type.slice]
# Slice types
r[type.slice.syntax]
```grammar,types
SliceType -> `[` Type `]`
```
r[type.slice.intro]
A slice is a [dynamically sized type] representing a 'view' into a sequence of
elements of type `T`. The slice type is written as `[T]`.
r[type.slice.unsized]
Slice types are generally used through pointer types. For example:
* `&[T]`: a 'shared slice', often just called a 'slice'. It doesn't own the
data it points to; it borrows it.
* `&mut [T]`: a 'mutable slice'. It mutably borrows the data it points to.
* `Box<[T]>`: a 'boxed slice'
Examples:
```rust
// A heap-allocated array, coerced to a slice
let boxed_array: Box<[i32]> = Box::new([1, 2, 3]);
// A (shared) slice into an array
let slice: &[i32] = &boxed_array[..];
```
r[type.slice.safe]
All elements of slices are always initialized, and access to a slice is always
bounds-checked in safe methods and operators.
[dynamically sized type]: ../dynamically-sized-types.md