12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- //
- // We've seen that passing arrays around can be awkward. Perhaps you
- // remember a particularly horrendous function definition from quiz3?
- // This function can only take arrays that are exactly 4 items long!
- //
- // fn printPowersOfTwo(numbers: [4]u16) void { ... }
- //
- // That's the trouble with arrays - their size is part of the data
- // type and must be hard-coded into every usage of that type. This
- // digits array is a [10]u8 forever and ever:
- //
- // var digits = [10]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- //
- // Thankfully, Zig has slices, which let you dynamically point to a
- // start item and provide a length. Here are slices of our digit
- // array:
- //
- // const foo = digits[0..1]; // 0
- // const bar = digits[3..9]; // 3 4 5 6 7 8
- // const all = digits[0..]; // 0 1 2 3 4 5 6 7 8 9
- //
- // As you can see, a slice [x..y] defines a first item by index x and
- // a length y (where y-1 is the index of the last item). Leaving y off
- // gives you the rest of the items.
- //
- // Notice that the type of a slice on an array of u8 items is []u8.
- //
- const std = @import("std");
- pub fn main() void {
- var cards = [8]u8{ 'A', '4', 'K', '8', '5', '2', 'Q', 'J' };
- // Please put the first 4 cards in hand1 and the rest in hand2.
- const hand1: []u8 = cards[???];
- const hand2: []u8 = cards[???];
- std.debug.print("Hand1: ", .{});
- printHand(hand1);
- std.debug.print("Hand2: ", .{});
- printHand(hand2);
- }
- // Please lend this function a hand. A u8 slice hand, that is.
- fn printHand(hand: ???) void {
- for (hand) |h| {
- std.debug.print("{u} ", .{h});
- }
- }
|