12-结构体

Wan Yutong Lv2

现在我们想象一个实际问题,假如我们要记录下1个学生的姓名性别年龄身高体重,我们可以怎么写?很自然的可以写出以下代码:

1
2
3
4
5
6
7
8
fun main(): int {
let stu1_name = "Xiao Ming"
let stu1_sex = "Male"
let stu1_age = 15
let stu1_height = 175.0
let stu1_weight = 60.0
return 0
}

可如果是10个,甚至100个呢?已知每个学生有5个信息,那么如果记录N个学生就要定义5N个变量,不仅容易搞混,而且太麻烦了,这是简单的数据结构就不够用了,我们便可以想到一些复合数据结构,用T[]吗?可是年龄和性别类型不一样,Alum也不存在元组这样的数据结构,并且用[N]也不利于可读性,于是我们便思考,在Alum中,是否存在一种复合结构类型,能够存储不同类型的数据,并且还带标签呢?当然有,就是结构体:struct T,它的语法如下:

1
2
3
4
struct S {
fieldN: TN,
...
}

我们可以通过S.field访问结构体中的字段,构造一个结构体,可以用这样的语法:

1
2
3
4
let s = S {
fieldN: V,
...
}

这与C语言是一致的,但需要注意的是,在Alum中,定义的结构体作为一种类型,不需要像C语言一样使用Struct T,可以直接使用T
那么对于上文存储的学生信息,我们便可以用结构体重写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Student {
name: string,
sex: string,
age: int,
height: float,
weight: float
}

fun main(): int {
let stu1 = Student {
name: "Xiao Ming",
sex: "Male",
age: 15,
height: 175.0,
weight: 60.0
}
return 0
}

这样就清晰多了,并且如果管理多个学生,可以存储到Student[]中,便能更轻松的管理,这不仅提高了可读性,也提高了效率
下面给出一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$import "io.al"
$import "convert.al"

// Struct declaration and using Example

struct Point {
x: int,
y: int
}

fun main(): int {
let p: Point = Point {
x: 1,
y: 1
}
println("Point(" + itoa(p.x) + ", " + itoa(p.y) +")")
return 0
}

注:示例代码来自Alum/examples/21_struct.al

  • Title: 12-结构体
  • Author: Wan Yutong
  • Created at : 2026-03-02 16:17:36
  • Updated at : 2026-03-03 11:38:47
  • Link: https://cr0.dpdns.org/2026/03/02/12-Struct/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
12-结构体