/* ===== 模块4:指针 ===== * test07_pointers — 指针操作 * 难度:2/5 * 验证点:& 取地址、* 解引用、null 空指针、指针自动解引用(->)、.* 后缀解引用 */ fn inc(ptr: *i32) void { *ptr = *ptr + 1; } fn main() i32 { /* ---- & 取地址和 * 解引用 ---- */ var x: i32 = 42; var p: *i32 = &x; var v := p.*; if v != 42 { ret 1; } /* 通过指针修改 */ p.* = 99; if x != 99 { ret 2; } /* 指针作为函数参数 */ var y: i32 = 5; inc(&y); if y != 6 { ret 3; } /* ---- null 空指针 ---- */ var np: *i32 = null; if np != null { ret 4; } if np == null {} else { ret 5; } /* ---- 指针自动解引用(ptr.field 相当于 ptr->field) ---- */ type Point = struct { a: i32, b: i32, }; var pt: Point; pt.a = 10; pt.b = 20; var pp: *Point = &pt; if pp.a != 10 { ret 6; } if pp.b != 20 { ret 7; } /* 通过指针修改字段 */ pp.a = 30; if pt.a != 30 { ret 8; } /* ---- 指向数组元素的指针 ---- */ var buf: [4]i32 = [4]i32{1, 2, 3, 4}; var elem_ptr: *i32 = &buf[0]; if elem_ptr.* != 1 { ret 9; } ret 0; }