test_single_item_pointer.zig (1341B) - Raw
1 const expect = @import("std").testing.expect; 2 3 test "address of syntax" { 4 // Get the address of a variable: 5 const x: i32 = 1234; 6 const x_ptr = &x; 7 8 // Dereference a pointer: 9 try expect(x_ptr.* == 1234); 10 11 // When you get the address of a const variable, you get a const single-item pointer. 12 try expect(@TypeOf(x_ptr) == *const i32); 13 14 // If you want to mutate the value, you'd need an address of a mutable variable: 15 var y: i32 = 5678; 16 const y_ptr = &y; 17 try expect(@TypeOf(y_ptr) == *i32); 18 y_ptr.* += 1; 19 try expect(y_ptr.* == 5679); 20 } 21 22 test "pointer array access" { 23 // Taking an address of an individual element gives a 24 // single-item pointer. This kind of pointer 25 // does not support pointer arithmetic. 26 var array = [_]u8{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 27 const ptr = &array[2]; 28 try expect(@TypeOf(ptr) == *u8); 29 30 try expect(array[2] == 3); 31 ptr.* += 1; 32 try expect(array[2] == 4); 33 } 34 35 test "slice syntax" { 36 // Get a pointer to a variable: 37 var x: i32 = 1234; 38 const x_ptr = &x; 39 40 // Convert to array pointer using slice syntax: 41 const x_array_ptr = x_ptr[0..1]; 42 try expect(@TypeOf(x_array_ptr) == *[1]i32); 43 44 // Coerce to many-item pointer: 45 const x_many_ptr: [*]i32 = x_array_ptr; 46 try expect(x_many_ptr[0] == 1234); 47 } 48 49 // test