Moved exercises to exercises because exercises
This commit is contained in:
parent
cf0920de31
commit
55ad7c32f2
45 changed files with 3 additions and 3 deletions
84
exercises/43_pointers5.zig
Normal file
84
exercises/43_pointers5.zig
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
//
|
||||
// Passing integer pointers around is generally not something you're going
|
||||
// to do. Integers are cheap to copy.
|
||||
//
|
||||
// But you know what IS useful? Pointers to structs:
|
||||
//
|
||||
// const Vertex = struct{ x: u32, y: u32, z: u32 };
|
||||
//
|
||||
// var v1 = Vertex{ .x=3, .y=2, .z=5 };
|
||||
//
|
||||
// var pv: *Vertex = &v1; // <-- a pointer to our struct
|
||||
//
|
||||
// Note that you don't need to dereference the "pv" pointer to access
|
||||
// the struct's fields:
|
||||
//
|
||||
// YES: pv.x
|
||||
// NO: pv.*.x
|
||||
//
|
||||
// We can write functions that take pointer arguments:
|
||||
//
|
||||
// fn foo(v: *Vertex) void {
|
||||
// v.x += 2;
|
||||
// v.y += 3;
|
||||
// v.z += 7;
|
||||
// }
|
||||
//
|
||||
// And pass references to them:
|
||||
//
|
||||
// foo(&v1);
|
||||
//
|
||||
//
|
||||
// Let's revisit our RPG example and make a printCharacter() function
|
||||
// that takes a Character pointer.
|
||||
//
|
||||
const std = @import("std");
|
||||
|
||||
const Class = enum{
|
||||
wizard,
|
||||
thief,
|
||||
bard,
|
||||
warrior,
|
||||
};
|
||||
|
||||
const Character = struct{
|
||||
class: Class,
|
||||
gold: u32,
|
||||
health: u8,
|
||||
experience: u32,
|
||||
};
|
||||
|
||||
pub fn main() void {
|
||||
var glorp = Character{
|
||||
.class = Class.wizard,
|
||||
.gold = 10,
|
||||
.health = 100,
|
||||
.experience = 20,
|
||||
};
|
||||
|
||||
// FIX ME!
|
||||
// Please pass our Character "glorp" to printCharacter():
|
||||
printCharacter( ??? );
|
||||
}
|
||||
|
||||
|
||||
// Note how this function's "c" parameter is a pointer to a Character struct.
|
||||
fn printCharacter(c: *Character) void {
|
||||
|
||||
// Here's something you haven't seen before: when switching an enum, you
|
||||
// don't have to write the full enum name. Zig understands that ".wizard"
|
||||
// means "Class.wizard" when we switch on a Class enum value:
|
||||
const class_name = switch (c.class) {
|
||||
.wizard => "Wizard",
|
||||
.thief => "Thief",
|
||||
.bard => "Bard",
|
||||
.warrior => "Warrior",
|
||||
};
|
||||
|
||||
std.debug.print("{s} (G:{} H:{} XP:{})", .{
|
||||
class_name,
|
||||
c.gold,
|
||||
c.health,
|
||||
c.experience,
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue