stage1 重构测试且成功00-05

This commit is contained in:
zzy
2026-07-05 21:45:43 +08:00
parent 51d8510b79
commit e2e0ebc21f
39 changed files with 1090 additions and 461 deletions

View File

@@ -0,0 +1,54 @@
/* ===== 模块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;
}