Matlab Coder:Matlab 数组到 C 数组

Matlab Coder : Matlab Array to C Array

我使用 matlab 编码器将 matlab 代码转换为 C。我在 matlab 中定义的简单数组在 C 中转换为复杂的结构。

struct emxArray_real_T
{
  double *data;
  int *size;
  int allocatedSize;
  int numDimensions;
  boolean_T canFreeData;
};

如果有人能阐明如何使用此结构,那将会很有帮助。

C 编程语言(以及许多派生语言)中的 struct 是一种复杂的数据类型声明,它定义了一个物理分组的变量列表,这些变量被放置在内存块中的一个名称下,允许不同的要通过单个指针访问的变量,或结构声明的名称 returns 相同的地址。该结构可以在关联中包含许多其他复杂和简单的数据类型。

因此 C 中的结构基本上是其中包含物理分组的变量列表的数组。

如果您真的只想使用简单的数组,请查看 here 了解其基本工作原理和语法。 here 用于结构及其基本工作和语法。

数组是相同数据类型的集合,而结构是不同数据类型的集合。

在 Matlab 中,数组可以包含所有数据类型的变量。

这就是为什么当您尝试从 Matlab 数组转换为 C 数组时,它正在转换为 C 结构而不是 C 数组,因为您的 Matlab 数组包含不同的数据类型。

创建类型 emxArray_real_T 是因为 MATLAB Coder 无法确定固定大小或 MATLAB 中数组大小的足够小的界限,例如 2x3。在这种情况下,生成的代码允许数组的大小在运行时通过使用动态内存分配(例如 malloc)和此数据结构来表示您在 C 中的 MATLAB 数组。这些在中称为动态分配的可变大小数组MATLAB Coder 文档和结构字段用于跟踪生成代码中动态分配的内存。

关于使用此类数组,documentation recommended by @horchler is a good place to start. Also, you can have a look at this other answer 描述了当存储的数据为 uint32 而不是 double 时使用相同 struct 的基础知识或 real_T 你的情况。