![MATLAB R2020a从入门到精通(升级版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/74/38507074/b_38507074.jpg)
8.1 结构体数组的创建
创建结构体数组有如下两种方法:使用赋值语句和使用函数。
8.1.1 使用赋值语句创建结构体数组
结构体(Structures)在很大程度上与单元数组非常相似,并且允许用户将类型不同的数据集中在一个单独的变量中。与单元数组不同的是,结构体用称为字段的名称来对其元素进行索引,而不是通过数字索引。
另外,从原理上讲,MATLAB也可以创建任意维数的结构体,但在大多数情况下,为了处理方便,用户通常只需要创建一个简单的结构体向量(一维结构体)。
与单元数组不同,结构体采用点号来访问字段中的数据变量,这一点与C语言中的类有些相似。只要采用点号为结构体中的各个字段赋初值,便创建了这个结构体。
下面通过为结构体中的每个属性赋值来创建一个结构体数组。例如,创建结构体数组Personel可以用如下所示的语句:
![img](https://epubservercos.yuewen.com/FDADB4/20266983901431206/epubprivate/OEBPS/Images/txt009_1.jpg?sign=1738921025-uc2ExoJuPwy5axdnxmHZrttZXQtxclUx-0-c82e0454ba6eb5dd4dbfe7fca1df3169)
运行结果如下:
![img](https://epubservercos.yuewen.com/FDADB4/20266983901431206/epubprivate/OEBPS/Images/txt009_2.jpg?sign=1738921025-oByZfSS7iuHZSQBGxfPPrAX4BxO86k9i-0-e3b45bc474e5db08f76ea6170d066fcf)
还可以用如下所示的语句把结构体数组扩展成1×2的结构体:
![img](https://epubservercos.yuewen.com/FDADB4/20266983901431206/epubprivate/OEBPS/Images/txt009_3.jpg?sign=1738921025-gv7Lr61Eho1YYslPbHUs4sdlYkQVy28c-0-6b3fbca2095a643e438ace567dbd72f3)
上述语句使结构体数组Personel变为1×2维。当用户扩展结构体数组时,MATLAB对未指定数据的属性自动赋值成空矩阵,使其满足以下规则。
· 数组中的每个结构体都具有同样多的属性名。
· 数组中的每个结构体都具有相同的属性名。
例如,如下所示的语句可以使结构体数组Personel变为1×3维,此时Personel(3).Score和Personel(3).Salary由于未指定数据,因此MATLAB将其设为空矩阵:
![img](https://epubservercos.yuewen.com/FDADB4/20266983901431206/epubprivate/OEBPS/Images/txt009_4.jpg?sign=1738921025-7p9mJKGxZsjuV7dSh25uFKdl5vybmtYL-0-bddfad63180bfb808c57bcb8e6349664)
注 意
结构体数组中元素属性的大小并不要求一致,如结构体数组Personel中的Name属性和Salary属性具有不同的长度。
8.1.2 使用函数创建结构体数组
除了可以使用赋值语句创建结构体数组,还可以使用struct()函数创建结构体数组。struct()函数的基本调用格式如下:
![img](https://epubservercos.yuewen.com/FDADB4/20266983901431206/epubprivate/OEBPS/Images/txt009_5.jpg?sign=1738921025-KZj1wzHD2sveTgL4OWhQh0SqcgQ7xiW3-0-19d9ecafc24c3a50552e074e14a97bb3)
上述语句中的输入变量为属性名和相应的属性值。struct()函数可以用不同的调用方法来创建结构体数组,如实现一个1×3的结构体数组Personel的方法如表8-1所示。
表8-1 实现一个1×3的结构体数组Personel的方法
![img](https://epubservercos.yuewen.com/FDADB4/20266983901431206/epubprivate/OEBPS/Images/txt009_6.jpg?sign=1738921025-YgvZ1g9m46mhEDZ36zz6s0178NbP5GtA-0-10dbfbac85f75758fdff8b7d1782104f)
另外,结构体还有一个方便之处,就是函数的参数传递问题。例如,如果人员组成的信息存储在一个结构体中,那么一个函数要想获得某人员组成的信息,将该人员所在的结构体作为参数传递给函数即可,即myfunc(Personel)。
如果采用数组变量方法存储这个人员的信息,那么一个函数要想获得该人员的信息,就需要传递3个参数,即myfunc(Name, Score, Salary)。