前言
最近在用CCS写代码,涉及matlab转C的工作,其中学到并且受益匪浅的就是用C语言的结构体创建类似matlab的元胞数组
实现
1 创建结构体
struct cell
{
float *data; //存储float类型数据的数组
int length; //数组的长度
}
2 定义结构体数组
创建包含多个结构体的数组,并使用动态内存分配来分配数组的大小,如下所示:
int i=10; //元胞个数
struct cell *cells=(struct cell*)malloc(i*sizeof(struct cell));
这个数组包含了10个元胞,每个元胞都是一个包含一个float类型数组的结构体。
3 访问每个元胞的数据
可以通过下标来进行访问
// 创建一个长度为5的float类型数组,将其设置为第一个元素的数据
cells[0].length = 5;
cells[0].data = (float*) malloc(cells[0].length * sizeof(float));
cells[0].data[0] = 1.0;
cells[0].data[1] = 2.0;
cells[0].data[2] = 3.0;
cells[0].data[3] = 4.0;
cells[0].data[4] = 5.0;
// 创建一个长度为3的float类型数组,将其设置为第二个元素的数据
cells[1].length = 3;
cells[1].data = (float*) malloc(cells[1].length * sizeof(float));
cells[1].data[0] = 0.1;
cells[1].data[1] = 0.2;
cells[1].data[2] = 0.3;
这个代码将第一个元胞的data成员设置为一个包含5个元素的float类型数组,将第二个元胞的data成员设置为一个包含3个元素的float类型数组,以此类推。要访问每个元素的数据,只需要使用数组下标即可
4 释放内存
用malloc开创的空间需要用free释放,避免内存泄露
free(cells[0].data);
free(cells[1].data);
free(cells);