![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=1739302879-qlPvVPuF7svg6RfML6t5gLsMMmSZqE0g-0-ce1e4568bf84bcae8a86ebce4b5ae4fb)
2.5.1 结构的创建
结构的创建的方法主要有直接赋值法和利用struct函数创建。
直接赋值法创建结构:直接用结构的名称,配合操作符“.”和相应的字段的名称完成创建,创建是直接给字段赋具体的数值。还可以用直接赋值法创建结构数组。
【例2-78】 直接赋值法创建结构示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P86_4544a.jpg?sign=1739302879-QFyh5LkZ14eilf6mplkfNoHDCNiJkDvH-0-f0d77d84ae7d8c73e8efc4fb555e6af4)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P86_4552a.jpg?sign=1739302879-Q8FXjY3mLFORDiy4Liilv3yMRsXqQF6z-0-ca8319a4d2cad8d6be3bf3368dd65dc3)
【例2-79】 用直接赋值法创建结构数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P86_4560a.jpg?sign=1739302879-boYm5bYNg7L4Xro1rdroWmcaZpJUq5lu-0-9eb435e659c4a6722e84c19b54f1b460)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P87_4583a.jpg?sign=1739302879-GAdQ3ZXstir6VpsNO2MV5H8Kc0mAOJeu-0-a6e3eb3c8184a3601a9f8b75fb6b8b2d)
在MATLAB中,还可以利用struct函数创建结构,struct函数的基本语法如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P87_4591a.jpg?sign=1739302879-w7ijxdDlliEOR9HUAhVpqFE6sJ68fqmB-0-61e8d9de72e69260d96b070d070e16d9)
实际上,在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=1739302879-Pp1RRc6P7ZwNVu1aTE7stROQNGUcQkmK-0-73fa33d159d608e2bfebecf2f19255d2)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P87_4607a.jpg?sign=1739302879-6g4ABLGYDUYZ8ZWsT9K2Ty4u93f7sCrr-0-3687ca3d7aa7e28ccfda1b2fd8eb3cac)
2.5.2 结构的基本操作
对于结构的基本操作其实是对结构数组元素包含的记录的操作,主要有结构记录数据的访问、字段的增加和删除。
访问结构数组元素包含的记录的方法如下:
(1)直接使用结构数组的名称和字段的名称以及操作符“.”完成相应的操作;
(2)使用“动态”字段的形式:利用动态字段形式访问结构数组元素,便于利用函数完成对结构字段数据的重复操作。
内嵌结构:当结构的字段记录了结构时,则称其为内嵌结构。创建内嵌结构可以使用直接赋值的方法,也可以使用struct函数完成。
【例2-81】 结构字段数据的访问。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P88_4627a.jpg?sign=1739302879-6Z5znORbLkIZ94PwKW8E499O83FqdSNg-0-c06698b47f3dcb2e69675766975bffdc)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P88_4635a.jpg?sign=1739302879-xMxaM8rrcN2y9rYKC1WuQdxL34RD9sST-0-8f4dfaf17383e66a28215a56bbcdfa9d)
【例2-82】 使用直接赋值的方法创建内嵌结构。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P89_4655a.jpg?sign=1739302879-adwsYSY4GNBunTcBahcI9UVl3NOUUAmv-0-3a9e6211063051e729438cd1778d3ca9)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P89_4663a.jpg?sign=1739302879-qw3Eakc3iWh4a9Zz1FJjedDD02ElzbOT-0-d97b9bab46a5089d27c1a7235be9d5c2)
2.5.3 结构操作函数
在MATLAB中提供了结构操作的函数如表2-18所示。
表2-18 结构操作函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T90_4754a.jpg?sign=1739302879-iXmaT73K8GzP0gMKzLL2mVQGgQMoic7G-0-4d65161a4e35e0075870ccacc4102d35)
【例2-83】 setfield函数示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P90_4741a.jpg?sign=1739302879-N82SRmAXVF36bTot6yBTrwHbZV9Ry5Sl-0-3210b39e39c3af59874053c9e9337321)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P90_4749a.jpg?sign=1739302879-nCxOGA6zOe3slGxrEuWxqwumluHuUCdX-0-0533931189c9e7d3500609a5d0256cb9)
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P91_4762a.jpg?sign=1739302879-4EwO4nW1UmDKWAoqZarqaGTf5CkpqGuD-0-94319c0182fd056052c82baeac8503cc)
【例2-84】 fieldnames函数、getfield函数和orderfields函数示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P91_4770a.jpg?sign=1739302879-00NnnEYTQYMpszS0lkFLcw256ZW682hk-0-903c341481d29eaeddb21c3747d525f8)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P92_4781a.jpg?sign=1739302879-JaVvLSPoVqrPq7Gs293EBJucCcaAtnjF-0-a1f40313eee146d04e1370be1a11641c)
【例2-85】 isfield函数和isstruct函数示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P92_4788a.jpg?sign=1739302879-WUwlYttvYsl15fKSZVDXkt8codZT0dtq-0-121e9f315ab52a227508d0dc39ebb4fc)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P92_4796a.jpg?sign=1739302879-rgARUjCiVVsPpU1ZCN5jB8KaZeJ5PrJR-0-bcf78a4d9e8f00844450bb0c134068c3)