diff options
author | Dave Gauer <dave@ratfactor.com> | 2021-02-08 20:35:28 -0500 |
---|---|---|
committer | Dave Gauer <dave@ratfactor.com> | 2021-02-08 20:35:28 -0500 |
commit | cf0920de31e9b5f3c5ba6de19a1b4c8d0c58b907 (patch) | |
tree | d0c1af19e12e503a6d720b8e8ef487966e4c7d75 /41_pointers3.zig | |
parent | adf5ddb27df7f5a22b0b7d3321dfc8bca1e7937a (diff) | |
download | ziglings-cf0920de31e9b5f3c5ba6de19a1b4c8d0c58b907.tar.gz ziglings-cf0920de31e9b5f3c5ba6de19a1b4c8d0c58b907.tar.bz2 ziglings-cf0920de31e9b5f3c5ba6de19a1b4c8d0c58b907.tar.xz ziglings-cf0920de31e9b5f3c5ba6de19a1b4c8d0c58b907.zip |
Added Ex. 38-43 for pointers, updated README
Added topics beyond the language basics from ziglearn.org
to the README. That's a lot of exercises. I'd like to keep
it under 100, though!
Diffstat (limited to '41_pointers3.zig')
-rw-r--r-- | 41_pointers3.zig | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/41_pointers3.zig b/41_pointers3.zig new file mode 100644 index 0000000..21a43bd --- /dev/null +++ b/41_pointers3.zig @@ -0,0 +1,41 @@ +// +// The tricky part is that the pointer's mutability (var vs const) refers +// to the ability to change what the pointer POINTS TO, not the ability +// to change the VALUE at that location! +// +// const locked: u8 = 5; +// var unlocked: u8 = 10; +// +// const p1: *const u8 = &locked; +// var p2: *const u8 = &locked; +// +// Both p1 and p2 point to constant values which cannot change. However, +// p2 can be changed to point to something else and p1 cannot! +// +// const p3: *u8 = &unlocked; +// var p4: *u8 = &unlocked; +// const p5: *const u8 = &unlocked; +// var p6: *const u8 = &unlocked; +// +// Here p3 and p4 can both be used to change the value they point to but +// p3 cannot point at anything else. +// What's interesting is that p5 and p6 act like p1 and p2, but point to +// the value at "unlocked". This is what we mean when we say that we can +// make a constant reference to any value! +// +const std = @import("std"); + +pub fn main() void { + var foo: u8 = 5; + var bar: u8 = 10; + + // Please define pointer "p" so that it can point to EITHER foo or + // bar AND change the value it points to! + ??? p: ??? = undefined; + + p = &foo; + p.* += 1; + p = &bar; + p.* += 1; + std.debug.print("foo={}, bar={}\n", .{foo, bar}); +} |