![MATLAB GUI程序设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/836/26793836/b_26793836.jpg)
2.5 结构
在MATLAB中,结构是包含一组记录的数据类型,记录是存储在相应的字段中,结构的字段可以是任意一种MATLAB数据类型的变量或者对象,结构类型的变量可以是一维的、二维的或者多维的数组,在访问结构类型数据的元素时,需要使用下标配合字段的形式。表2-17展现了元胞数组和结构数组的异同。
表2-17 元胞数组和结构数组的异同
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T85_4499a.jpg?sign=1739321676-gvkdZBbidrlJL2TiO6r0evD1ojS0XF2A-0-de373cc581d87da172e1094a3592bcac)
2.5.1 结构的创建
结构的创建的方法主要有直接赋值法和利用struct函数创建。
直接赋值法创建结构:直接用结构的名称,配合操作符“.”和相应的字段的名称完成创建,创建是直接给字段赋具体的数值。还可以用直接赋值法创建结构数组。
【例2-78】 直接赋值法创建结构示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P86_4544a.jpg?sign=1739321676-YjbTwLg6lIbmY58OBWTUvteClkKPZMh7-0-787df4f1f7b75933791f890a55b07222)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P86_4552a.jpg?sign=1739321676-lEFzDFUE6HfcDQSkYKdzcH2Aq8hyeF91-0-66d78ae07714e76af9eb4ef264949c87)
【例2-79】 用直接赋值法创建结构数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P86_4560a.jpg?sign=1739321676-wVP5Ujaip47wTvNNp43crfu6Bhffggva-0-312ebd3239aa434e55444a7f8eee15f9)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P87_4583a.jpg?sign=1739321676-OJHeWknQY0qHO8pojs5O7R7d76qgNwRB-0-871d8638a330a47e451cddb37914371a)
在MATLAB中,还可以利用struct函数创建结构,struct函数的基本语法如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P87_4591a.jpg?sign=1739321676-9B4X9maIu6pgn9DfxmdkWcCKN15psCRz-0-0b280efdad053c47328e17bbed9b90c7)
实际上,在MATLAB中一般是不能直接使用这个函数的,因为MATLAB无法识别每一个field的性质,所以MATLAB是无法判断直接给出的value值是否是合法的。为了确保不出错,一般可以这样处理:先给每一个field赋值,每个field都赋值完成后,再使用struct()函数。在写作形式上,field与相应的value同名,这样一来必是合法的写作形式。这可以看作是struct()函数中field与value的一致性。
【例2-80】 利用struct函数创建结构示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P87_4599a.jpg?sign=1739321676-pP26Fv9o90juVvMA1OuZmBKC1Ixgu2kc-0-c15de3c33f57b97b98a90e642423aeac)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P87_4607a.jpg?sign=1739321676-YniZUC1FXmaq2hxpHZSHQoU4ZrsHFyNN-0-ca8d53343eee6239fea201333bb602f9)
2.5.2 结构的基本操作
对于结构的基本操作其实是对结构数组元素包含的记录的操作,主要有结构记录数据的访问、字段的增加和删除。
访问结构数组元素包含的记录的方法如下:
(1)直接使用结构数组的名称和字段的名称以及操作符“.”完成相应的操作;
(2)使用“动态”字段的形式:利用动态字段形式访问结构数组元素,便于利用函数完成对结构字段数据的重复操作。
内嵌结构:当结构的字段记录了结构时,则称其为内嵌结构。创建内嵌结构可以使用直接赋值的方法,也可以使用struct函数完成。
【例2-81】 结构字段数据的访问。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P88_4627a.jpg?sign=1739321676-NYzpkrOUyjODi3K8Qw1SoxAC00a4WUY7-0-27451d373ab532009731b1cf6d854d14)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P88_4635a.jpg?sign=1739321676-gG9k7VvEDEfdSDpqGHFUKpMEGTLvrTSu-0-b34eb9479138829a4350e4cfc2190f48)
【例2-82】 使用直接赋值的方法创建内嵌结构。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P89_4655a.jpg?sign=1739321676-QcfH5A3u1vjBlXaa6ZViL3qdYAZb56Hz-0-c590597555944e660dfdc1b3f123d6ba)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P89_4663a.jpg?sign=1739321676-0OQZbS2dswyABRt383CLNdXViVnqVZ2E-0-0285da18329c32801919061cb44934f3)
2.5.3 结构操作函数
在MATLAB中提供了结构操作的函数如表2-18所示。
表2-18 结构操作函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T90_4754a.jpg?sign=1739321676-bFy2lXPhYe0O9vlZAhzXaGhnCy50b8cO-0-966e167b6eabae20f7ef0796fb858f62)
【例2-83】 setfield函数示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P90_4741a.jpg?sign=1739321676-XilBRcRgN6rLXiIK5JEmC1wd1IlVB9cE-0-7f1a7ba039752b072c913c296aff05fc)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P90_4749a.jpg?sign=1739321676-7uZ6VtSAdUcXQxNrs3d1Ux6E2Rqch1Um-0-619b604e92e99f806a3624f2aba74e32)
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P91_4762a.jpg?sign=1739321676-LnNNCxgVnOwPjUIjStZZQBNVEb1hoTI5-0-f7d4dfe138c5cb6d380db19fb9695f54)
【例2-84】 fieldnames函数、getfield函数和orderfields函数示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P91_4770a.jpg?sign=1739321676-xDKOWb6tnoqiZuHmwTXh0nso95xxwixA-0-5e908f743d5d23c4b53e1c3215751c3b)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P92_4781a.jpg?sign=1739321676-JTSVINhpK4hujxNd6gpvG0jFoQodGis7-0-2f96eda230b34da674f0ac5e53042139)
【例2-85】 isfield函数和isstruct函数示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P92_4788a.jpg?sign=1739321676-5ILqQMK3BlcSnxMmCqssL01NqTj5r1O6-0-10d5308b8cdd300eacf57a72c032ab4f)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P92_4796a.jpg?sign=1739321676-BBQDnf7X0ezr0vrpNeFhcBIkZA2jndyx-0-23bdc73e3235f920ef807c1fda14c3c0)