matlab不同函数间传递结构体数据_matlab结构体struct函数使
⽤⽅法
1.struct函数直接定义
查阅⽂档是这样的:struct(field1,value1,field2,value2,.....)
结构体数组不能作为参数传递给函数
上⾯这个格式很重要记住
field1和field2称为这个结构体的字段,要熟悉字段这个词语。
注意:这⾥先提⼀句 matlab中的⽂档显⽰Any nonscalar cell arrays in the set value1,...,valueN must have the same dimensions.
意思是 任何⾮标量元胞数组必须尺⼨相同,后⾯会需要⽤到
⽬录
1.struct函数直接定义
查阅⽂档是这样的:struct(field1,value1,field2,value2,.....)
1.1 先举例正常的:s = struct('f1','name','f2','blue')
1.2 如果f2变成普通数组呢?
1.3 这⾥复习⼀下元胞数组
1.4 再变化,如果其中⼀个字段⽐如f2变成元胞数组即cell型数组呢?
情况⼀:存在⼀个value内容为n个元素的元胞数组,不管是1×n还是n×1,只要⾏数或者列数不超过2
情况⼆:value中全部是元胞数组
2 结束语
1.1 先举例正常的:s = struct('f1','name','f2','blue')
所以创造了⼀个s结构体,这个s结构体包括两个字段,⼀个字段是⼀种内容。此时可以看到这个结构体⼤⼩是1×1,原因是这⾥⾯每个字段的⼤⼩是1×1。
1.2 如果f2变成普通数组呢?
结果如下图
1.3 这⾥复习⼀下元胞数组
防⽌有⼈忘记或者⼩⽩看不懂(当然我也是⼩⽩233333),具体见我上篇博客
元胞数组(cell)创建及赋值:
cell(n),创造n×n⼤⼩的数组
从这⾥能看到两种括号的应⽤区别了吗?当⽤{ }时,代表直接写值,⽤()定位时,赋值就必须在内容外层再套⼀层{ }
举例:a = {'NAME',[1 2 3;2 4 6],ones(2,3),{'color',[1 2]}}
⽤逗号 “,”做间隔
根据上图⾥第4个框内内容可知,cell内可以再次赋值⼀个cell型数组的
1.4 再变化,如果其中⼀个字段⽐如f2变成元胞数组即cell型数组呢?
举例
s = struct('f1','name','f2',{[1 2 3;2 4 6],'color',ones(2,2)})
将f2的内容变成了⼀个⼤⼩为1×3的元胞数组,此时观察结构体内容值
会发现字段变成了3,对⽐前⾯字段是每个field的名字⽽不同,那么这种不同是为什么呢?
没有为什么哈哈哈,规则就是这样的,当存在元胞数组时,那么有两种情况
情况⼀:存在⼀个value内容为n个元素的元胞数组,不管是1×n还是n×1,只要⾏数或者列数不超过2
那么字段会变成n⼤⼩,同时结构体数组⼤⼩为元胞数组⼤⼩,就像上⾯例⼦f1也会像f2⼀样变成1×3,但是f1只有⼀个,怎么办呢,就会默认全部填充这⼀个,填充成和元胞数组⼀样⼤⼩的
情况⼆:value中全部是元胞数组
⼀开头我介绍的那句⽂档中翻译出来的话,全部是元胞数组的话,必须尺⼨相同才可以
不然就会出现,⽐如我把f1位置改成两个元素的元胞数组
s = struct('f1',{'name',[2 3 4]'},'f2',{[1 2 3,2 4 6],'color',ones(2,2),'laa'})
2 结束语
⾄此struct函数讲解结束,还是⾮常简单的,如果理解不清楚⼀定要亲⾃把代码⾃⼰在matlab上输⼀遍运⾏看结果,尝试了就知道啦!!不要偷懒哦

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。