Acceso a los elementos
Cuando declaramos un array:
|
const a_numbers = [_]u8{ 5, 4, 3, 21, 13 }; |
a_numbers apunta a una estructura de 5 posiciones como esta:
|
Para acceder a los diferentes elementos de un array, usamos los índices que empiezan a partir del 0. Esto es así porque un índice realmente representa un desplazamiento (offset) de i posiciones, contando desde el inicio de un array.
- El primer elemento está al principio y el desplazamiento es igual a 0,
- El segundo elemento está en el índice 1,
- El tercer elemento en el 2, y así sucesivamente.
Aquí tienes unas fórmulas para aclarar estos conceptos:
Número Elemento = índice + 1
Índice = Número Elemento - 1
Índice final = Longitud del Array - 1
Si te preguntas ¿cuánta memoria ocupa un array del tipo u8 de 5 posiciones?
5 elementos * 8 bits = 40 bits
Seguro que te suena que 8 bits se denominan 1 byte, así que también podemos decir que un array de longitud 5 del tipo u8 ocupa 5 bytes.
Si queremos acceder a un elemento del array usamos el índice “apuntando” a la posición deseada. Veamos cómo acceder a la primera y la última posición:
array_position.zig |
|
const std = @import("std"); const print = std.debug.print; pub fn main() void { const a_numbers = [_]u8{ 8, 5, 10, 6, 12 }; const n_first_position = 0; const n_last_position = a_numbers.len; print("El primer elemento de a_numbers está en el índice [{}]: {}\n", .{ n_first_position, a_numbers[n_first_position] }); print("El último elemento de está en el índice [{}]: {}\n", .{ n_last_position, a_numbers[n_last_position] }); } |
|
$ zig run array_position.zig |
|
array_position.zig:11:98: error: index 5 outside array of length 5 … |
¿Sabrías decir dónde está el error?
El error que hemos cometido es bastante típico. Hemos confundido la longitud con la última posición. Como los índices empiezan en 0, la última posición termina en longitud del array - 1, tal y como hemos señalado antes. Con poner:
|
const n_last_position = a_numbers.len - 1; |
… se soluciona el problema y Zig ejecuta correctamente el programa:
|
$ zig run array_position.zig |
|
El primer elemento de a_numbers está en el índice [0]: 8 El último elemento de está en el índice [4]: 12 |