为代码生成定义结构体数组
确保字段的一致性
对于代码生成,当您创建 MATLAB® 结构体数组时,数组元素中的对应字段必须具有相同的大小、类型和复/实性。
创建结构体数组后,可以使用 coder.varsize
(MATLAB Coder) 使结构体字段具有可变大小。请参阅声明可变大小结构体字段 (MATLAB Coder)。
使用 repmat
定义具有一致字段属性的结构体数组
您可以使用 MATLAB repmat
函数从标量结构体创建结构体数组,该函数将复制并平铺现有标量结构体:
创建一个标量结构体,如为代码生成定义标量结构体中所述。
调用
repmat
,传递标量结构体和数组的维度。使用标准数组索引和结构体圆点表示法为每个结构体赋值。
例如,以下代码会创建一个 1×3 标量结构体数组 X
。数组中的每个元素都由结构体 s
定义,该结构体有两个字段,a
和 b
:
... s.a = 0; s.b = 0; X = repmat(s,1,3); X(1).a = 1; X(2).a = 2; X(3).a = 3; X(1).b = 4; X(2).b = 5; X(3).b = 6; ...
使用 struct
定义结构体数组
要使用 struct
函数创建结构体数组,请将字段值参量指定为元胞数组。每个元胞数组元素都是对应结构体数组元素中字段的值。对于代码生成,结构体中的对应字段必须具有相同的类型。因此,字段值的元胞数组中的元素必须具有相同的类型。
例如,以下代码会创建一个 1×3 结构体数组。对于结构体数组中的每个结构体,a
的类型为 double
,b
的类型为 char
。
s = struct('a', {1 2 3}, 'b', {'a' 'b' 'c'});
使用串联定义结构体数组
要创建小型结构体数组,可以使用方括号 ( [ ]
) 作为串联运算符将一个或多个结构体联接到一个数组中。请参阅创建、串联和扩展矩阵。对于代码生成,您串联的结构体必须具有相同的大小、类和复/实性。
例如,以下代码使用串联和局部函数来创建 1×3 结构体数组的元素:
... W = [ sab(1,2) sab(2,3) sab(4,5) ]; function s = sab(a,b) s.a = a; s.b = b; ...