aboutsummaryrefslogtreecommitdiff
path: root/exercises/040_pointers2.zig
diff options
context:
space:
mode:
Diffstat (limited to 'exercises/040_pointers2.zig')
-rw-r--r--exercises/040_pointers2.zig27
1 files changed, 27 insertions, 0 deletions
diff --git a/exercises/040_pointers2.zig b/exercises/040_pointers2.zig
new file mode 100644
index 0000000..43dd2c3
--- /dev/null
+++ b/exercises/040_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.* });
+}