This code works, but I want to explicitly declare the type of the index range max
. However uX
or iX
, where X = 8, 16 or 32 gives compile errors. What is the correct type?
fn main() {
let mut arr2: [[f64; 3]; 3] = [[0.0; 3]; 3];
let pi: f64 = 3.1415926535;
let max = 3; // let max: i16 e.g. is wrong
for ii in 0..max {
for jj in 0..3 {
let i = ii as f64;
let j = jj as f64;
arr2[ii][jj] = ((i + j) * pi * 41.0).sqrt().sin();
println!("arr2[{}][{}] is {}", ii, jj, arr2[ii][jj]);
}
}
}
An array is an indexed collection of component variables, called the elements of the array. The indexes are the values of an ordinal type, called the index type of the array. The elements all have the same size and the same type, called the element type of the array.
Array elements are accessed by using an integer index. Array index starts with 0 and goes till the size of the array minus 1. The name of the array is also a pointer to the first element of the array.
(definition) Definition: The location of an item in an array.
There are three different kinds of arrays: indexed arrays, multidimensional arrays, and associative arrays.
The compiler gives you a note about this:
= note: slice indices are of type `usize`
You must index a slice with a usize
. usize
is an unsigned integral type that has the same size as a pointer, and can represent a memory offset or the size of an object in memory. On 32-bit systems, it's a 32-bit integer, and on 64-bit systems, it's a 64-bit integer. Declare your index variables as usize
unless you really have a lot of them, in which case you can use x as usize
to cast them to an usize
.
When you leave out the type annotation, Rust deduces that your integer literals must be of type usize
because slices implement Index<usize>
and not Index<i32>
or Index<any other integral type>
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With