转载:https://blog.csdn.net/m0_37407756/article/details/70045209

要在MALTAB中实现比较复杂的编程,就不能不用struct类型。而且在MATLAB中实现struct比C中更为方便。

1.     结构数组的创建

MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。

a)     使用直接引用方式定义结构

与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量x:

x.real = 0; % 创建字段名为real,并为该字段赋值为0

x.imag = 0 % 为x创建一个新的字段imag,并为该字段赋值为0

x =

real: 0

imag: 0

然后可以将其动态扩充为数组:

x(2).real = 0; % 将x扩充为1×2的结构数组

x(2).imag = 0;

在任何需要的时候,也可以为数组动态扩充字段,如增加字段scale:

x(1).scale = 0;

这样,所有x都增加了一个scale字段,而x(1)之外的其他变量的scale字段为空:

x(1) % 查看结构数组的第一个元素的各个字段的内容

ans =

real: 0

imag: 0

scale: 0

x(2) % 查看结构数组的第二个元素的各个字段的内容,注意没有赋值的字段为空

ans =

real: 0

imag: 0

scale: []

应该注意的是,x的real、imag、scale字段不一定是单个数据元素,它们可以是任意数据类型,可以是向量、数组、矩阵甚至是其他结构变量或元胞数组,而且不同字段之间其数据类型不需要相同。例如:

clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10);

数组中不同元素的同一字段的数据类型也不要求一样:

x(2).real = '123';

x(2).imag = rand(5,1);

甚至还可以通过引用数组字段来定义结构数据类型的某字段:

x(3).real = x(1); x(3).imag = 3;

x(3)

ans =

real: [1x1 struct]

imag: 3

b)     使用struct函数创建结构

使用struct函数也可以创建结构,该函数产生或把其他形式的数据转换为结构数组。

struct的使用格式为:

s = sturct('field1',values1,'field2',values2,…);

该函数将生成一个具有指定字段名和相应数据的结构数组,其包含的数据values1、values2等必须为具有相同维数的数据,数据的存放位置与其他结构位置一一对应的。

对于struct的赋值用到了元胞数组。数组values1、values2等可以是元胞数组、标量元胞单元或者单个数值。每个values的数据被赋值给相应的field字段。

当valuesX为元胞数组的时候,生成的结构数组的维数与元胞数组的维数相同。而在数据中不包含元胞的时候,得到的结构数组的维数是1×1的。例如:

s = struct('type',{'big','little'},'color',{'blue','red'},'x',{3,4})

s =

1x2 struct array with fields:

type

color

x

得到维数为1×2的结构数组s,包含了type、color和x共3个字段。这是因为在struct函数中{'big','little'}、{'blue','red'}和{3,4}都是1×2的元胞数组,可以看到两个数据成分分别为:

s(1,1)

ans =

type: 'big'

color: 'blue'

x: 3

s(1,2)

ans =

type: 'little'

color: 'red'

x: 4

相应的,如果将struct函数写成下面的形式:

s = struct('type',{'big';'little'},'color',{'blue';'red'},'x',{3;4})

s =

2x1 struct array with fields:

type

color

x

则会得到一个2×1的结构数组。

2.     结构数组的操作

MATLAB中专门用于对结构数组的操作的函数并不多,通过help datatypes获取数据类型列表,可以看到其中的结构数据类型的有关的函数,主要如下表所示。

表4.3.1 结构数组的操作函数

函数名

功能描述

函数名

功能描述

deal

把输入处理成输出

Fieldnames

获取结构的字段名

getfield

获取结构中指定字段的值

Rmfield

删除结构的字段(不是字段内容)

setfield

设置结构数组中指定的字段的值

Struct

创建结构数组

struct2cell

结构数组转化成元胞数组

Isfield

判断是否存在该字段

isstruct

判断某变量是否是结构类型

 

以上归纳总结的完整版带应用实例的Pdf版本在这里。

转载:[Matlab]结构体(Struct)相关推荐

  1. Golang结构体struct的使用(结构体嵌套, 匿名结构体等)

    转自: https://studygolang.com/articles/11313 golang中是没有class的,但是有一个结构体struct,有点类似,他没有像java,c++中继承的概念,但 ...

  2. 谈结构体struct 初始化多出的点号“.”,数组[]初始化多出的逗号“,”

    结构体struct初始化多出的点号"." 在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式,该方式是书中并没有介绍过的. 这种方式称为指定初始化(design ...

  3. matlab 结构体 单元数组,matlab结构体、数组和单元数组类型的创建

    matlab结构体.数组和单元数组类型的创建 @ matlab结构体类型 通过字段赋值创建结构体 创建格式: 结构体名称.字段名称 样例: >> student.name='Alan'; ...

  4. Matlab 结构体之间相同字段的赋值

    Matlab 结构体之间相同字段的赋值 假设有两个结构体 main_subject 和 all_subject .其中 main_subject 中包含了某位同学的主修成绩和学号姓名信息,需要将这些信 ...

  5. linux 结构体 struct addrinfo 简介

    目录 定义 相关方法 1. getaddrinfo(const char, const char, const struct addrinfo, struct addrinfo*) 2. freead ...

  6. 结构体struct timeval 和 struct timespec的定义

    结构体struct timeval 和 struct timespec的定义均在头文件<sys/time.h>中,具体定义如下: struct timeval {long tv_sec; ...

  7. linux sock结构体,struct socket结构体详解

    在内核中为什么要有struct socket结构体呢? struct socket结构体的作用是什么? 下面这个图,我觉得可以回答以上两个问题.  由这个图可知,内核中的进程可以通过使用struct ...

  8. 内核中用于数据接收的结构体struct msghdr

    我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构.在我们的虚拟机上发送icmp回显请求包,ping另一台主机172.16.48.1.我们使用系统调用send ...

  9. C/C++结构体struct 与结构体数组和枚举型enum的结合使用

    C/C++结构体struct 与结构体数组和枚举型enum的结合使用 #include "stdafx.h" #include <string> #include &l ...

最新文章

  1. 二分图行列匹配--- hdu2119,hdu1498
  2. [转]C# WinForm 关于窗体最大化时的是否全屏效果与是否遮盖任务栏
  3. 一款针对Outlook的红队安全研究工具
  4. nginx 静态资源WEB服务
  5. 公众号滑动图代码_实用技巧:公众号封面图如何提取?
  6. pomelo mysql_pomelo连接mySQL
  7. python rsa加密解密 字符串_python_rsa加密解密
  8. RxJava flatMap,switchMap,concatMap
  9. Nagios 3 Centreon 2 RC5 安装与配置(1)
  10. 文献笔记(9)(2019ISSCC)
  11. Floyd-Warshall算法过程中矩阵计算方法—十字交叉法
  12. C++:hex、oct、dec使用
  13. c语言括号表示法画树怎么画,各种树的画法,这篇文章写得太详细了,值得收藏!...
  14. 【转】App应用内搜索:移动搜索的新入口
  15. 五大通信设备厂商:华为存隐忧,中兴已掉队
  16. 自驱力超强的羊驼?斯坦福微调LLaMa
  17. 尚硅谷-康师傅-MySQL详细笔记(1-9章)
  18. linux .so文件详解
  19. CFD基本流程 及 STAR-CCM+ 11.0软件介绍
  20. C/C++:Windows10环境下安装gcc编译器

热门文章

  1. Node-SASS安装 scss
  2. mac在查看jre通路
  3. 24种设计模式--命令模式【Command Pattern】
  4. iPhone开发 调用wcf服务
  5. JavaScript 图片切割效果(带拖放、缩放效果)
  6. WinAPI: waveOutPause - 暂停播放
  7. 接口测试-使用mock生产随机数据
  8. stats | 介绍三个与数学规划函数
  9. 关于地图制图大赛的8点说明,附地图学习资源
  10. 2021年提升效率的7个新vue实战技巧!