Main Content

为代码生成定义结构体数组

确保字段的一致性

对于代码生成,当您创建 MATLAB® 结构体数组时,数组元素中的对应字段必须具有相同的大小、类型和复/实性。

创建结构体数组后,可以使用 coder.varsize (MATLAB Coder) 使结构体字段具有可变大小。请参阅声明可变大小结构体字段 (MATLAB Coder)

使用 repmat 定义具有一致字段属性的结构体数组

您可以使用 MATLAB repmat 函数从标量结构体创建结构体数组,该函数将复制并平铺现有标量结构体:

  1. 创建一个标量结构体,如为代码生成定义标量结构体中所述。

  2. 调用 repmat,传递标量结构体和数组的维度。

  3. 使用标准数组索引和结构体圆点表示法为每个结构体赋值。

例如,以下代码会创建一个 1×3 标量结构体数组 X。数组中的每个元素都由结构体 s 定义,该结构体有两个字段,ab

...
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 的类型为 doubleb 的类型为 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;
...

另请参阅

相关主题