stage1 重构测试且成功00-05
This commit is contained in:
54
stage1/test07_pointers.spl
Normal file
54
stage1/test07_pointers.spl
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user