8.1 结构体数组的创建

创建结构体数组有如下两种方法:使用赋值语句和使用函数。

8.1.1 使用赋值语句创建结构体数组

结构体(Structures)在很大程度上与单元数组非常相似,并且允许用户将类型不同的数据集中在一个单独的变量中。与单元数组不同的是,结构体用称为字段的名称来对其元素进行索引,而不是通过数字索引。

另外,从原理上讲,MATLAB也可以创建任意维数的结构体,但在大多数情况下,为了处理方便,用户通常只需要创建一个简单的结构体向量(一维结构体)。

与单元数组不同,结构体采用点号来访问字段中的数据变量,这一点与C语言中的类有些相似。只要采用点号为结构体中的各个字段赋初值,便创建了这个结构体。

下面通过为结构体中的每个属性赋值来创建一个结构体数组。例如,创建结构体数组Personel可以用如下所示的语句:

img

运行结果如下:

img

还可以用如下所示的语句把结构体数组扩展成1×2的结构体:

img

上述语句使结构体数组Personel变为1×2维。当用户扩展结构体数组时,MATLAB对未指定数据的属性自动赋值成空矩阵,使其满足以下规则。

· 数组中的每个结构体都具有同样多的属性名。

· 数组中的每个结构体都具有相同的属性名。

例如,如下所示的语句可以使结构体数组Personel变为1×3维,此时Personel(3).Score和Personel(3).Salary由于未指定数据,因此MATLAB将其设为空矩阵:

img

注 意

结构体数组中元素属性的大小并不要求一致,如结构体数组Personel中的Name属性和Salary属性具有不同的长度。

8.1.2 使用函数创建结构体数组

除了可以使用赋值语句创建结构体数组,还可以使用struct()函数创建结构体数组。struct()函数的基本调用格式如下:

img

上述语句中的输入变量为属性名和相应的属性值。struct()函数可以用不同的调用方法来创建结构体数组,如实现一个1×3的结构体数组Personel的方法如表8-1所示。

表8-1 实现一个1×3的结构体数组Personel的方法

img

另外,结构体还有一个方便之处,就是函数的参数传递问题。例如,如果人员组成的信息存储在一个结构体中,那么一个函数要想获得某人员组成的信息,将该人员所在的结构体作为参数传递给函数即可,即myfunc(Personel)。

如果采用数组变量方法存储这个人员的信息,那么一个函数要想获得该人员的信息,就需要传递3个参数,即myfunc(Name, Score, Salary)。