Arrays
Shell
1/4 test "iterate over an array"... OK
2/4 test "modify an array"... OK
3/4 test "compile-time array initialization"... OK
4/4 test "array initialization with function calls"... OK
All 4 tests passed.
See also:
Similar to and Anonymous Struct Literals the type can be omitted from array literals:
anon_list.zig
const std = @import("std");
const expect = std.testing.expect;
test "anonymous list literal syntax" {
var array: [4]u8 = .{11, 22, 33, 44};
try expect(array[0] == 11);
try expect(array[2] == 33);
try expect(array[3] == 44);
}
If there is no type in the result location then an anonymous list literal actually turns into a with numbered field names:
infer_list_literal.zig
const expect = std.testing.expect;
test "fully anonymous list literal" {
try dump(.{ @as(u32, 1234), @as(f64, 12.34), true, "hi"});
}
fn dump(args: anytype) !void {
try expect(args.@"0" == 1234);
try expect(args.@"1" == 12.34);
try expect(args.@"2");
try expect(args.@"3"[0] == 'h');
try expect(args.@"3"[1] == 'i');
}
Shell
1/1 test "fully anonymous list literal"... OK
Multidimensional arrays can be created by nesting arrays:
Shell
$ zig test multidimensional.zig
1/1 test "multidimensional arrays"... OK
All 1 tests passed.
The syntax [N:x]T
describes an array which has a sentinel element of value x
at the index corresponding to len
.
null_terminated_array.zig
const std = @import("std");
const expect = std.testing.expect;
test "null terminated array" {
const array = [_:0]u8 {1, 2, 3, 4};
try expect(@TypeOf(array) == [4:0]u8);
try expect(array.len == 4);
try expect(array[4] == 0);
Shell