aboutsummaryrefslogtreecommitdiff
path: root/40_pointers2.zig
diff options
context:
space:
mode:
authorDave Gauer <dave@ratfactor.com>2021-02-08 20:35:28 -0500
committerDave Gauer <dave@ratfactor.com>2021-02-08 20:35:28 -0500
commitcf0920de31e9b5f3c5ba6de19a1b4c8d0c58b907 (patch)
treed0c1af19e12e503a6d720b8e8ef487966e4c7d75 /40_pointers2.zig
parentadf5ddb27df7f5a22b0b7d3321dfc8bca1e7937a (diff)
downloadziglings-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 '40_pointers2.zig')
-rw-r--r--40_pointers2.zig27
1 files changed, 27 insertions, 0 deletions
diff --git a/40_pointers2.zig b/40_pointers2.zig
new file mode 100644
index 0000000..b046dc1
--- /dev/null
+++ b/40_pointers2.zig
@@ -0,0 +1,27 @@
+//
+// It's important to note that variable pointers and constant pointers
+// are different types.
+//
+// Given:
+//
+// var foo: u8 = 5;
+// const bar: u8 = 5;
+//
+// Then:
+//
+// &foo is of type "*u8"
+// &bar is of type "*const u8"
+//
+// You can always make a constant pointer to a variable, but you cannot
+// make a variable pointer to a constant. This sounds like a logic puzzle,
+// but it just means that once data is declared immutable, you can't
+// coerce it to a mutable type. It's a safety thing (to prevent mistakes).
+//
+const std = @import("std");
+
+pub fn main() void {
+ const a: u8 = 12;
+ const b: *u8 = &a; // fix this!
+
+ std.debug.print("a: {}, b: {}\n", .{a, b.*});
+}